dovecot-2.2: virtual: Fixed assert-crashes where trying to open ...

dovecot at dovecot.org dovecot at dovecot.org
Sun Jul 6 16:10:33 UTC 2014


details:   http://hg.dovecot.org/dovecot-2.2/rev/f1d29866e147
changeset: 17606:f1d29866e147
user:      Timo Sirainen <tss at iki.fi>
date:      Sun Jul 06 19:08:59 2014 +0300
description:
virtual: Fixed assert-crashes where trying to open an already opened backend mailbox.

diffstat:

 src/plugins/virtual/virtual-mail.c    |  6 +++---
 src/plugins/virtual/virtual-save.c    |  6 +++---
 src/plugins/virtual/virtual-storage.c |  3 ++-
 3 files changed, 8 insertions(+), 7 deletions(-)

diffs (58 lines):

diff -r dffc6dd2be0d -r f1d29866e147 src/plugins/virtual/virtual-mail.c
--- a/src/plugins/virtual/virtual-mail.c	Fri Jul 04 15:33:12 2014 +0300
+++ b/src/plugins/virtual/virtual-mail.c	Sun Jul 06 19:08:59 2014 +0300
@@ -108,14 +108,14 @@
 	bbox = virtual_backend_box_lookup(mbox, vmail->cur_vrec.mailbox_id);
 	vmail->cur_backend_mail = backend_mail_find(vmail, bbox->box);
 	if (vmail->cur_backend_mail == NULL) {
-		if (virtual_backend_box_open(mbox, bbox) < 0) {
+		if (!bbox->box->opened &&
+		    virtual_backend_box_open(mbox, bbox) < 0) {
 			virtual_box_copy_error(mail->box, bbox->box);
 			return -1;
 		}
 		(void)virtual_mail_set_backend_mail(mail, bbox);
-	} else {
-		virtual_backend_box_accessed(mbox, bbox);
 	}
+	virtual_backend_box_accessed(mbox, bbox);
 	vmail->cur_lost = !mail_set_uid(vmail->cur_backend_mail,
 					vmail->cur_vrec.real_uid);
 	mail->expunged = vmail->cur_lost || vmail->cur_backend_mail->expunged;
diff -r dffc6dd2be0d -r f1d29866e147 src/plugins/virtual/virtual-save.c
--- a/src/plugins/virtual/virtual-save.c	Fri Jul 04 15:33:12 2014 +0300
+++ b/src/plugins/virtual/virtual-save.c	Sun Jul 06 19:08:59 2014 +0300
@@ -36,7 +36,8 @@
 		i_assert(ctx->backend_save_ctx == NULL);
 		i_assert(ctx->open_errstr == NULL);
 
-		if (virtual_backend_box_open(mbox, mbox->save_bbox) < 0) {
+		if (!mbox->save_bbox->box->opened &&
+		    virtual_backend_box_open(mbox, mbox->save_bbox) < 0) {
 			errstr = mailbox_get_last_error(mbox->save_bbox->box,
 							&ctx->open_error);
 			ctx->open_errstr = i_strdup(errstr);
@@ -45,9 +46,8 @@
 				virtual_transaction_get(_t, mbox->save_bbox->box);
 			ctx->backend_save_ctx = mailbox_save_alloc(backend_trans);
 		}
-	} else {
-		virtual_backend_box_accessed(mbox, mbox->save_bbox);
 	}
+	virtual_backend_box_accessed(mbox, mbox->save_bbox);
 	return _t->save_ctx;
 }
 
diff -r dffc6dd2be0d -r f1d29866e147 src/plugins/virtual/virtual-storage.c
--- a/src/plugins/virtual/virtual-storage.c	Fri Jul 04 15:33:12 2014 +0300
+++ b/src/plugins/virtual/virtual-storage.c	Sun Jul 06 19:08:59 2014 +0300
@@ -564,7 +564,8 @@
 	   to wait for changes and avoid opening all mailboxes here. */
 
 	array_foreach(&mbox->backend_boxes, bboxp) {
-		if (virtual_backend_box_open(mbox, *bboxp) < 0) {
+		if (!(*bboxp)->box->opened &&
+		    virtual_backend_box_open(mbox, *bboxp) < 0) {
 			/* we can't report error in here, so do it later */
 			(*bboxp)->open_failed = TRUE;
 			continue;


More information about the dovecot-cvs mailing list