[evolution-patches] 71003, threads running at exit




somehow the quit code lost the thread shutdown stuff

this might alleviate some of the 'mailbox resyncing' problems, if people do filtering and/or automatic mail fetching


? mail/ems.diff
? mail/evolution-mail-2.0.schemas
? mail/m.diff
? mail/ma.diff
? mail/default/zh_CN/Makefile
? mail/default/zh_CN/Makefile.in
Index: mail/ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/mail/ChangeLog,v
retrieving revision 1.3576
diff -u -p -r1.3576 ChangeLog
--- mail/ChangeLog	18 Feb 2005 16:43:55 -0000	1.3576
+++ mail/ChangeLog	21 Feb 2005 04:45:25 -0000
@@ -1,3 +1,10 @@
+2005-02-21  Not Zed  <NotZed Ximian com>
+
+	** See bug #71003
+
+	* mail-component.c (impl_quit): add a new state MC_QUIT_THREADS to
+	wait for all mail threads to finish before quitting.
+
 2005-02-18  Rodney Dawes  <dobey novell com>
 
 	* mail/em-folder-view.c (emfv_popup_copy_text): New method to copy
Index: mail/mail-component.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/mail-component.c,v
retrieving revision 1.106
diff -u -p -r1.106 mail-component.c
--- mail/mail-component.c	1 Feb 2005 08:35:03 -0000	1.106
+++ mail/mail-component.c	21 Feb 2005 04:45:25 -0000
@@ -108,7 +108,7 @@ struct _MailComponentPrivate {
 	GMutex *lock;
 
 	/* states/data used during shutdown */
-	enum { MC_QUIT_START, MC_QUIT_SYNC } quit_state;
+	enum { MC_QUIT_START, MC_QUIT_SYNC, MC_QUIT_THREADS } quit_state;
 	int quit_count;
 	int quit_expunge;	/* expunge on quit this time around? */
 
@@ -669,8 +669,16 @@ impl_quit(PortableServer_Servant servant
 	}
 		/* Falls through */
 	case MC_QUIT_SYNC:
-		return mc->priv->quit_count == 0;
-		/* What else do we need to do at quit time? */
+		if (mc->priv->quit_count > 0)
+			return TRUE;
+
+		mail_cancel_all();
+		mc->priv->quit_state = MC_QUIT_THREADS;
+
+		/* Falls through */
+	case MC_QUIT_THREADS:
+		/* should we keep cancelling? */
+		return mail_msg_active((unsigned int)-1) == 0;
 	}
 
 	return TRUE;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]