2006-06-16 [colin] 2.3.0cvs18
[claws.git] / src / main.c
index bf89c0edbf48c9bcd71dfc0b11683787119cc643..db35939c6462fd97e978511d879d27405c3b36dc 100644 (file)
@@ -505,10 +505,6 @@ int main(int argc, char *argv[])
 
        inc_autocheck_timer_init(mainwin);
 
-       /* ignore SIGPIPE signal for preventing sudden death of program */
-#ifdef G_OS_UNIX
-       signal(SIGPIPE, SIG_IGN);
-#endif
        if (cmd.online_mode == ONLINE_MODE_OFFLINE) {
                main_window_toggle_work_offline(mainwin, TRUE, FALSE);
        }
@@ -601,14 +597,18 @@ int main(int argc, char *argv[])
 
 static void save_all_caches(FolderItem *item, gpointer data)
 {
+       gint free_caches = GPOINTER_TO_INT(data);
        if (!item->cache) {
                return;
        }
 
        if (item->opened)
                folder_item_close(item);
-
-       folder_item_free_cache(item, TRUE);
+       
+       if (free_caches)
+               folder_item_free_cache(item, TRUE);
+       else
+               folder_item_write_cache(item);
 }
 
 static void exit_sylpheed(MainWindow *mainwin)
@@ -632,7 +632,7 @@ static void exit_sylpheed(MainWindow *mainwin)
 
        /* save all state before exiting */
        folder_write_list();
-       folder_func_to_all_folders(save_all_caches, NULL);
+       folder_func_to_all_folders(save_all_caches, GINT_TO_POINTER(1));
 
        main_window_get_size(mainwin);
        main_window_get_position(mainwin);
@@ -1246,6 +1246,14 @@ static void send_queue(void)
 
 static void quit_signal_handler(int sig)
 {
+#ifdef SIGPIPE
+       if (sig == SIGPIPE) {
+               debug_print("caugth SIGPIPE, maybe X closing!\n");
+               folder_write_list();
+               folder_func_to_all_folders(save_all_caches, GINT_TO_POINTER(0));
+               return; 
+       }
+#endif
        debug_print("Quitting on signal %d\n", sig);
 
        g_timeout_add(0, clean_quit, NULL);
@@ -1268,6 +1276,9 @@ static void install_basic_sighandlers()
 #ifdef SIGHUP
        sigaddset(&mask, SIGHUP);
 #endif
+#ifdef SIGPIPE
+       sigaddset(&mask, SIGPIPE);
+#endif
 
        act.sa_handler = quit_signal_handler;
        act.sa_mask    = mask;
@@ -1282,6 +1293,9 @@ static void install_basic_sighandlers()
 #ifdef SIGHUP
        sigaction(SIGHUP, &act, 0);
 #endif 
+#ifdef SIGPIPE
+       sigaction(SIGPIPE, &act, 0);
+#endif 
 
        sigprocmask(SIG_UNBLOCK, &mask, 0);
 #endif /* !G_OS_WIN32 */