changeset 10323:513cff2a7008 HEAD

dsync: Wait for all saves to finish before updating mailboxes' metadata. The mailbox updating could try closing the same mailbox that still has an unfinished save.
author Timo Sirainen <tss@iki.fi>
date Fri, 13 Nov 2009 16:54:48 -0500
parents 00aba806af0b
children 05893dd71338
files src/dsync/dsync-brain-private.h src/dsync/dsync-brain.c
diffstat 2 files changed, 12 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/dsync/dsync-brain-private.h	Fri Nov 13 16:53:37 2009 -0500
+++ b/src/dsync/dsync-brain-private.h	Fri Nov 13 16:54:48 2009 -0500
@@ -8,6 +8,8 @@
 	DSYNC_STATE_GET_MAILBOXES = 0,
 	DSYNC_STATE_SYNC_MAILBOXES,
 	DSYNC_STATE_SYNC_MSGS,
+	DSYNC_STATE_SYNC_MSGS_FLUSH,
+	DSYNC_STATE_SYNC_MSGS_FLUSH2,
 	DSYNC_STATE_SYNC_UPDATE_MAILBOX,
 	DSYNC_STATE_SYNC_FLUSH,
 	DSYNC_STATE_SYNC_FLUSH2,
--- a/src/dsync/dsync-brain.c	Fri Nov 13 16:53:37 2009 -0500
+++ b/src/dsync/dsync-brain.c	Fri Nov 13 16:54:48 2009 -0500
@@ -387,6 +387,16 @@
 	case DSYNC_STATE_SYNC_MSGS:
 		dsync_brain_sync_msgs(brain);
 		break;
+	case DSYNC_STATE_SYNC_MSGS_FLUSH:
+		/* wait until all saves are done, so we don't try to close
+		   the mailbox too early */
+		dsync_worker_finish(brain->src_worker,
+				    dsync_brain_worker_finished, brain);
+		dsync_worker_finish(brain->dest_worker,
+				    dsync_brain_worker_finished, brain);
+		break;
+	case DSYNC_STATE_SYNC_MSGS_FLUSH2:
+		break;
 	case DSYNC_STATE_SYNC_UPDATE_MAILBOX:
 		dsync_brain_msg_sync_update_mailbox(brain);
 		brain->state++;