map->hdr.unused_old_recent_messages_count = 0;
if (hdr->first_recent_uid == 0)
map->hdr.first_recent_uid = 1;
- index->need_recreate = TRUE;
+ if (index->need_recreate == NULL)
+ index->need_recreate = i_strdup("Upgrading from index version 1.0");
/* fall through */
case 1:
/* pre-v1.1.rc6: make sure the \Recent flags are gone */
hdr->log_file_seq < log_file_seq)
return TRUE;
- if (index->need_recreate)
+ if (index->need_recreate != NULL)
return TRUE;
/* already synced */
}
if (!mail_index_need_sync(index, flags, log_file_seq, log_file_offset) &&
- !index->index_deleted && !index->need_recreate) {
+ !index->index_deleted && index->need_recreate == NULL) {
if (locked)
mail_transaction_log_sync_unlock(index->log, "syncing determined unnecessary");
return 0;
log_diff > index->optimization_set.index.rewrite_min_log_bytes))
return TRUE;
- if (index->need_recreate)
+ if (index->need_recreate != NULL)
return TRUE;
return FALSE;
}
mail_transaction_log_want_rotate(index->log);
if (ret == 0 &&
(want_rotate || mail_index_sync_want_index_write(index))) {
- index->need_recreate = FALSE;
+ i_free(index->need_recreate);
index->index_min_write = FALSE;
mail_index_write(index, want_rotate);
}
va_list va;
uint32_t seq;
uoff_t offset;
+ char *reason, *reason_free = NULL;
+
+ va_start(va, fmt);
+ reason = reason_free = i_strdup_vprintf(fmt, va);
+ va_end(va);
ctx->errors = TRUE;
/* make sure we don't get to this same error again by updating the
dovecot.index */
- ctx->view->index->need_recreate = TRUE;
+ if (ctx->view->index->need_recreate == NULL) {
+ ctx->view->index->need_recreate = reason;
+ reason_free = NULL;
+ }
mail_transaction_log_view_get_prev_pos(ctx->view->log_view,
&seq, &offset);
(seq == ctx->view->index->fsck_log_head_file_seq &&
offset < ctx->view->index->fsck_log_head_file_offset)) {
/* be silent */
- return;
- }
-
- va_start(va, fmt);
- T_BEGIN {
+ } else {
mail_index_set_error(ctx->view->index,
"Log synchronization error at "
"seq=%u,offset=%"PRIuUOFF_T" for %s: %s",
seq, offset, ctx->view->index->filepath,
- t_strdup_vprintf(fmt, va));
- } T_END;
- va_end(va);
+ reason);
+ }
+ i_free(reason_free);
}