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;
 }