From 1d4a75cccaaba308a8802856dea9db6cef77fc8f Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Wed, 11 May 2016 08:44:11 +0200 Subject: [PATCH] exit more abruptly to avoid mysterious core dump on quitting program --- src/qtgui/main.cpp | 10 +++++++--- src/qtgui/rclmain_w.cpp | 10 ++++++++-- src/qtgui/recoll.h | 1 + 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/qtgui/main.cpp b/src/qtgui/main.cpp index 5b5b00f6..4cbbe3bd 100644 --- a/src/qtgui/main.cpp +++ b/src/qtgui/main.cpp @@ -75,6 +75,11 @@ void forgetTempFile(string &fn) fn.erase(); } +void deleteAllTempFiles() +{ + PTMutexLocker locker(thetempfileslock); + o_tempfiles.clear(); +} Rcl::Db *rcldb; @@ -152,9 +157,8 @@ static void recollCleanup() deleteZ(rcldb); deleteZ(theconfig); - PTMutexLocker locker(thetempfileslock); - o_tempfiles.clear(); - + deleteAllTempFiles(); + #ifdef RCL_USE_ASPELL deleteZ(aspell); #endif diff --git a/src/qtgui/rclmain_w.cpp b/src/qtgui/rclmain_w.cpp index 077ff705..5ab26e5f 100644 --- a/src/qtgui/rclmain_w.cpp +++ b/src/qtgui/rclmain_w.cpp @@ -18,6 +18,7 @@ #include #include MEMORY_INCLUDE +#include #include #include @@ -687,8 +688,13 @@ void RclMain::fileExit() rwSettings(true); - // Let the exit handler clean up the rest (internal recoll stuff). - exit(0); + // We should do the right thing and let exit() call all the + // cleanup handlers. But we have few persistent resources and qt + // exit is a great source of crashes and pita. So do our own + // cleanup: + deleteAllTempFiles(); + // and scram out + _Exit(0); } // Start a db query and set the reslist docsource diff --git a/src/qtgui/recoll.h b/src/qtgui/recoll.h index 190e9798..5266db5e 100644 --- a/src/qtgui/recoll.h +++ b/src/qtgui/recoll.h @@ -39,6 +39,7 @@ extern RclConfig *theconfig; extern void rememberTempFile(TempFile); extern void forgetTempFile(string &fn); +extern void deleteAllTempFiles(); extern Rcl::Db *rcldb; extern int recollNeedsExit;