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