Skip to content

Commit

Permalink
imapc: Fix handling UIDVALIDITY changes
Browse files Browse the repository at this point in the history
Index was being correctly reset, but the transaction was rolled back.
  • Loading branch information
sirainen authored and cmouse committed Jun 26, 2018
1 parent ada9a6b commit 6eb0220
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 7 deletions.
6 changes: 3 additions & 3 deletions src/lib-storage/index/imapc/imapc-mailbox.c
Expand Up @@ -94,7 +94,7 @@ static int imapc_mailbox_commit_delayed_expunges(struct imapc_mailbox *mbox)
}

int imapc_mailbox_commit_delayed_trans(struct imapc_mailbox *mbox,
bool *changes_r)
bool force, bool *changes_r)
{
int ret = 0;

Expand All @@ -104,7 +104,7 @@ int imapc_mailbox_commit_delayed_trans(struct imapc_mailbox *mbox,
mail_index_view_close(&mbox->delayed_sync_view);
if (mbox->delayed_sync_trans == NULL)
;
else if (!mbox->selected) {
else if (!mbox->selected && !force) {
/* ignore any changes done during SELECT */
mail_index_transaction_rollback(&mbox->delayed_sync_trans);
} else {
Expand Down Expand Up @@ -744,7 +744,7 @@ static void imapc_sync_uid_validity(struct imapc_mailbox *mbox)
/* The reset needs to be committed before FETCH 1:*
results are received. */
bool changes;
if (imapc_mailbox_commit_delayed_trans(mbox, &changes) < 0)
if (imapc_mailbox_commit_delayed_trans(mbox, TRUE, &changes) < 0)
mail_index_mark_corrupted(mbox->box.index);
imapc_mailbox_init_delayed_trans(mbox);
}
Expand Down
2 changes: 1 addition & 1 deletion src/lib-storage/index/imapc/imapc-storage.c
Expand Up @@ -788,7 +788,7 @@ static void imapc_mailbox_close(struct mailbox *box)
struct imapc_mailbox *mbox = IMAPC_MAILBOX(box);
bool changes;

(void)imapc_mailbox_commit_delayed_trans(mbox, &changes);
(void)imapc_mailbox_commit_delayed_trans(mbox, FALSE, &changes);
imapc_mail_fetch_flush(mbox);
if (mbox->client_box != NULL)
imapc_client_mailbox_close(&mbox->client_box);
Expand Down
2 changes: 1 addition & 1 deletion src/lib-storage/index/imapc/imapc-storage.h
Expand Up @@ -192,7 +192,7 @@ void imapc_simple_run(struct imapc_simple_context *sctx);
void imapc_simple_callback(const struct imapc_command_reply *reply,
void *context);
int imapc_mailbox_commit_delayed_trans(struct imapc_mailbox *mbox,
bool *changes_r);
bool force, bool *changes_r);
void imapc_mailbox_noop(struct imapc_mailbox *mbox);
void imapc_mailbox_set_corrupted(struct imapc_mailbox *mbox,
const char *reason, ...) ATTR_FORMAT(2, 3);
Expand Down
4 changes: 2 additions & 2 deletions src/lib-storage/index/imapc/imapc-sync.c
Expand Up @@ -512,7 +512,7 @@ static int imapc_sync_finish(struct imapc_sync_context **_ctx)

/* this is done simply to commit delayed expunges if there are any
(has to be done after sync is committed) */
if (imapc_mailbox_commit_delayed_trans(ctx->mbox, &changes) < 0)
if (imapc_mailbox_commit_delayed_trans(ctx->mbox, FALSE, &changes) < 0)
ctx->failed = TRUE;

i_free(ctx);
Expand Down Expand Up @@ -579,7 +579,7 @@ imapc_mailbox_sync_init(struct mailbox *box, enum mailbox_sync_flags flags)
/* initial FETCH failed already */
ret = -1;
}
if (imapc_mailbox_commit_delayed_trans(mbox, &changes) < 0)
if (imapc_mailbox_commit_delayed_trans(mbox, FALSE, &changes) < 0)
ret = -1;
if ((changes || mbox->sync_fetch_first_uid != 0 ||
index_mailbox_want_full_sync(&mbox->box, flags)) &&
Expand Down

0 comments on commit 6eb0220

Please sign in to comment.