]> granicus.if.org Git - neomutt/commitdiff
Don't open the same mailbox twice
authorMehdi Abaakouk <sileht@sileht.net>
Wed, 21 Nov 2018 17:59:35 +0000 (18:59 +0100)
committerRichard Russon <rich@flatcap.org>
Thu, 22 Nov 2018 14:39:53 +0000 (14:39 +0000)
mailbox.h
mx.c

index d5b3fe896dde88621a3e1c343cecb4b15132ca2d..9b074f491a80086ac2b36e73db458ef8eb0cd851 100644 (file)
--- a/mailbox.h
+++ b/mailbox.h
@@ -124,6 +124,7 @@ struct Mailbox
   struct Hash *label_hash;  /**< hash table for x-labels */
 
   struct Account *account;
+  int opened;              /**< number of times mailbox is opened */
 
   int flags; /**< e.g. #MB_NORMAL */
 
diff --git a/mx.c b/mx.c
index b3757827350c7fb978c998239d3251caea68694c..2e1477f09dc693b40478687d4ccf313955d94508 100644 (file)
--- a/mx.c
+++ b/mx.c
@@ -231,7 +231,9 @@ static int mx_open_mailbox_append(struct Mailbox *m, int flags)
   if (!m->mx_ops || !m->mx_ops->mbox_open_append)
     return -1;
 
-  return m->mx_ops->mbox_open_append(m, flags);
+  int rc = m->mx_ops->mbox_open_append(m, flags);
+  m->opened++;
+  return rc;
 }
 
 /**
@@ -363,6 +365,7 @@ struct Context *mx_mbox_open(struct Mailbox *m, const char *path, int flags)
     mutt_message(_("Reading %s..."), m->path);
 
   int rc = m->mx_ops->mbox_open(ctx);
+  m->opened++;
 
   if ((rc == 0) || (rc == -2))
   {
@@ -400,6 +403,10 @@ void mx_fastclose_mailbox(struct Context *ctx)
 
   struct Mailbox *m = ctx->mailbox;
 
+  m->opened--;
+  if (m->opened != 0)
+    return;
+
   /* never announce that a mailbox we've just left has new mail. #3290
    * TODO: really belongs in mx_mbox_close, but this is a nice hook point */
   if (!m->peekonly)