Mercurial > dovecot > original-hg > dovecot-1.2
changeset 9330:cf93e420fc57 HEAD
mbox-snarf: Keep the mailbox locked while snarfing to avoid duplicates.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 17 Aug 2009 10:42:12 -0400 |
parents | 956d2f962e97 |
children | a40f5c34ace8 |
files | src/plugins/mbox-snarf/mbox-snarf-plugin.c |
diffstat | 1 files changed, 17 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/mbox-snarf/mbox-snarf-plugin.c Sat Aug 15 20:41:55 2009 -0400 +++ b/src/plugins/mbox-snarf/mbox-snarf-plugin.c Mon Aug 17 10:42:12 2009 -0400 @@ -23,8 +23,6 @@ struct mbox_snarf_mailbox { union mailbox_module_context module_ctx; - - struct mailbox *spool_mbox; }; const char *mbox_snarf_plugin_version = PACKAGE_VERSION; @@ -108,31 +106,26 @@ MBOX_SNARF_CONTEXT(box->storage); struct mail_storage *storage; struct mbox_snarf_mailbox *mbox = MBOX_SNARF_CONTEXT(box); - - if (mbox->spool_mbox == NULL) { - /* try to open the spool mbox */ - mstorage->open_spool_inbox = TRUE; - storage = box->storage; - mbox->spool_mbox = - mailbox_open(&storage, "INBOX", NULL, - MAILBOX_OPEN_KEEP_RECENT | - MAILBOX_OPEN_NO_INDEX_FILES); - mstorage->open_spool_inbox = FALSE; - } + struct mailbox *spool_mbox; + static struct mailbox_sync_context *ctx; - if (mbox->spool_mbox != NULL) - mbox_snarf(mbox->spool_mbox, box); - - return mbox->module_ctx.super.sync_init(box, flags); -} + /* try to open the spool mbox */ + mstorage->open_spool_inbox = TRUE; + storage = box->storage; + spool_mbox = mailbox_open(&storage, "INBOX", NULL, + MAILBOX_OPEN_KEEP_LOCKED | + MAILBOX_OPEN_KEEP_RECENT | + MAILBOX_OPEN_NO_INDEX_FILES); + mstorage->open_spool_inbox = FALSE; -static int mbox_snarf_close(struct mailbox *box) -{ - struct mbox_snarf_mailbox *mbox = MBOX_SNARF_CONTEXT(box); + if (spool_mbox != NULL) + mbox_snarf(spool_mbox, box); - if (mbox->spool_mbox != NULL) - mailbox_close(&mbox->spool_mbox); - return mbox->module_ctx.super.close(box); + ctx = mbox->module_ctx.super.sync_init(box, flags); + + if (spool_mbox != NULL) + mailbox_close(&spool_mbox); + return ctx; } static struct mailbox * @@ -178,7 +171,6 @@ mbox->module_ctx.super = box->v; box->v.sync_init = mbox_snarf_sync_init; - box->v.close = mbox_snarf_close; MODULE_CONTEXT_SET(box, mbox_snarf_storage_module, mbox); return box; }