]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imap: Don't rollback transaction if expunge search fails
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 3 Feb 2022 19:01:04 +0000 (20:01 +0100)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Tue, 22 Feb 2022 09:28:55 +0000 (09:28 +0000)
Just commit the expunges done before the failure. The next EXPUNGE will
continue from there.

src/imap/imap-expunge.c

index 9a5bafed4fd008087efa0696f297f4d1028e0c16..efe329453022dc8a1a5bddc21051a97b08f4ff4a 100644 (file)
@@ -105,15 +105,11 @@ int imap_expunge(struct mailbox *box, struct mail_search_arg *next_search_arg,
                }
 
                ret = mailbox_search_deinit(&ctx);
-               if (ret < 0) {
-                       mailbox_transaction_rollback(&t);
-                       break;
-               } else {
-                       ret = mailbox_transaction_commit(&t);
-                       if (ret < 0)
-                               break;
-               }
-       } while (imap_search_seqset_iter_next(seqset_iter));
+               /* If mailbox search fails, just commit the expunges done
+                  so far. There's no need to rollback. */
+               if (mailbox_transaction_commit(&t) < 0)
+                       ret = -1;
+       } while (ret >= 0 && imap_search_seqset_iter_next(seqset_iter));
 
        imap_search_seqset_iter_deinit(&seqset_iter);
        mail_search_args_unref(&search_args);