dovecot-2.0: mdbox: Purge crashed if it purged all messages from...

dovecot at dovecot.org dovecot at dovecot.org
Tue Apr 20 18:05:25 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/944f4335845f
changeset: 11179:944f4335845f
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Apr 20 18:05:08 2010 +0300
description:
mdbox: Purge crashed if it purged all messages from a file.

diffstat:

 src/lib-storage/index/dbox-multi/mdbox-purge.c   |  14 +++++++++-----
 src/lib-storage/index/dbox-multi/mdbox-storage.c |   8 --------
 2 files changed, 9 insertions(+), 13 deletions(-)

diffs (49 lines):

diff -r 94ee28a11c47 -r 944f4335845f src/lib-storage/index/dbox-multi/mdbox-purge.c
--- a/src/lib-storage/index/dbox-multi/mdbox-purge.c	Tue Apr 20 17:09:19 2010 +0300
+++ b/src/lib-storage/index/dbox-multi/mdbox-purge.c	Tue Apr 20 18:05:08 2010 +0300
@@ -271,18 +271,22 @@
 
 	if (ret <= 0)
 		ret = -1;
-	else {
+	else if (ctx->append_ctx == NULL) {
+		/* everything purged from this file */
+		ret = 1;
+	} else {
 		/* assign new file_id + offset to moved messages */
 		if (dbox_map_append_move(ctx->append_ctx, &copied_map_uids,
 					 &expunged_map_uids) < 0 ||
 		    dbox_map_append_commit(ctx->append_ctx) < 0)
 			ret = -1;
-		else {
+		else
 			ret = 1;
-			(void)dbox_file_unlink(file);
-		}
 	}
-	dbox_map_append_free(&ctx->append_ctx);
+	if (ret > 0)
+		(void)dbox_file_unlink(file);
+	if (ctx->append_ctx != NULL)
+		dbox_map_append_free(&ctx->append_ctx);
 	if (ret < 0)
 		dbox_file_unlock(file);
 	array_free(&copied_map_uids);
diff -r 94ee28a11c47 -r 944f4335845f src/lib-storage/index/dbox-multi/mdbox-storage.c
--- a/src/lib-storage/index/dbox-multi/mdbox-storage.c	Tue Apr 20 17:09:19 2010 +0300
+++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c	Tue Apr 20 18:05:08 2010 +0300
@@ -47,14 +47,6 @@
 		return -1;
 	}
 
-#ifndef HAVE_FLOCK
-	if (master_service_get_client_limit(master_service) > 1) {
-		*error_r = "mdbox requires client_limit=1 for service "
-			"since your OS doesn't support flock()";
-		return -1;
-	}
-#endif
-
 	_storage->unique_root_dir =
 		p_strdup(_storage->pool, ns->list->set.root_dir);
 


More information about the dovecot-cvs mailing list