dovecot-2.0: dsync: Added more asserts to dsync_worker_finish() ...

dovecot at dovecot.org dovecot at dovecot.org
Fri Jul 16 15:57:45 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/38fcf81cc9e0
changeset: 11840:38fcf81cc9e0
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Jul 16 13:57:41 2010 +0100
description:
dsync: Added more asserts to dsync_worker_finish() handling

diffstat:

 src/dsync/dsync-proxy-client.c |  11 +++++++++--
 src/dsync/dsync-worker-local.c |   6 ++++++
 2 files changed, 15 insertions(+), 2 deletions(-)

diffs (74 lines):

diff -r 8cf47a359213 -r 38fcf81cc9e0 src/dsync/dsync-proxy-client.c
--- a/src/dsync/dsync-proxy-client.c	Fri Jul 16 13:46:57 2010 +0100
+++ b/src/dsync/dsync-proxy-client.c	Fri Jul 16 13:57:41 2010 +0100
@@ -68,6 +68,7 @@
 	struct aqueue *request_queue;
 
 	unsigned int handshake_received:1;
+	unsigned int finishing:1;
 	unsigned int finished:1;
 };
 
@@ -247,6 +248,12 @@
 {
 	bool success = TRUE;
 
+	i_assert(worker->finishing);
+	i_assert(!worker->finished);
+
+	worker->finishing = FALSE;
+	worker->finished = TRUE;
+
 	if (strcmp(line, "changes") == 0)
 		worker->worker.unexpected_changes = TRUE;
 	else if (strcmp(line, "fail") == 0)
@@ -285,8 +292,6 @@
 		ret = proxy_client_worker_next_msg_get(worker, &request, line);
 		break;
 	case PROXY_CLIENT_REQUEST_TYPE_FINISH:
-		i_assert(!worker->finished);
-		worker->finished = TRUE;
 		proxy_client_worker_next_finish(worker, &request, line);
 		break;
 	}
@@ -1062,7 +1067,9 @@
 	struct proxy_client_request request;
 
 	i_assert(worker->save_input == NULL);
+	i_assert(!worker->finishing);
 
+	worker->finishing = TRUE;
 	worker->finished = FALSE;
 
 	o_stream_send_str(worker->output, "FINISH\n");
diff -r 8cf47a359213 -r 38fcf81cc9e0 src/dsync/dsync-worker-local.c
--- a/src/dsync/dsync-worker-local.c	Fri Jul 16 13:46:57 2010 +0100
+++ b/src/dsync/dsync-worker-local.c	Fri Jul 16 13:57:41 2010 +0100
@@ -102,6 +102,7 @@
 	void *finish_context;
 
 	unsigned int reading_mail:1;
+	unsigned int finishing:1;
 	unsigned int finished:1;
 };
 
@@ -1510,7 +1511,9 @@
 	if (worker->save_io != NULL || worker->reading_mail)
 		return;
 
+	i_assert(worker->finishing);
 	i_assert(!worker->finished);
+	worker->finishing = FALSE;
 	worker->finished = TRUE;
 	worker->finish_callback(!worker->worker.failed, worker->finish_context);
 }
@@ -1700,6 +1703,9 @@
 	struct local_dsync_worker *worker =
 		(struct local_dsync_worker *)_worker;
 
+	i_assert(!worker->finishing);
+
+	worker->finishing = TRUE;
 	worker->finished = FALSE;
 	worker->finish_callback = callback;
 	worker->finish_context = context;


More information about the dovecot-cvs mailing list