Index was being correctly reset, but the transaction was rolled back.
}
int imapc_mailbox_commit_delayed_trans(struct imapc_mailbox *mbox,
- bool *changes_r)
+ bool force, bool *changes_r)
{
int ret = 0;
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 {
/* 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);
}
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);
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);
/* 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);
/* 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)) &&