dovecot: Don't assert-crash if index was just reset.
dovecot at dovecot.org
dovecot at dovecot.org
Fri Nov 2 18:25:32 EET 2007
details: http://hg.dovecot.org/dovecot/rev/7d7f31de0826
changeset: 6663:7d7f31de0826
user: Timo Sirainen <tss at iki.fi>
date: Fri Nov 02 18:25:27 2007 +0200
description:
Don't assert-crash if index was just reset.
diffstat:
1 file changed, 9 insertions(+), 8 deletions(-)
src/lib-index/mail-index-view-sync.c | 17 +++++++++--------
diffs (75 lines):
diff -r c2c543538b5d -r 7d7f31de0826 src/lib-index/mail-index-view-sync.c
--- a/src/lib-index/mail-index-view-sync.c Fri Nov 02 18:13:20 2007 +0200
+++ b/src/lib-index/mail-index-view-sync.c Fri Nov 02 18:25:27 2007 +0200
@@ -91,12 +91,12 @@ mail_transaction_log_sort_expunges(ARRAY
}
static int
-view_sync_set_log_view_range(struct mail_index_view *view, bool sync_expunges)
+view_sync_set_log_view_range(struct mail_index_view *view, bool sync_expunges,
+ bool *reset_r)
{
const struct mail_index_header *hdr = &view->index->map->hdr;
uint32_t start_seq, end_seq;
uoff_t start_offset, end_offset;
- bool reset;
int ret;
start_seq = view->log_file_expunge_seq;
@@ -109,7 +109,7 @@ view_sync_set_log_view_range(struct mail
ret = mail_transaction_log_view_set(view->log_view,
start_seq, start_offset,
end_seq, end_offset,
- &reset);
+ reset_r);
if (ret <= 0) {
if (ret < 0)
return -1;
@@ -123,7 +123,7 @@ view_sync_set_log_view_range(struct mail
return -1;
}
- if (!reset || sync_expunges)
+ if (!*reset_r || sync_expunges)
break;
/* we can't do this. sync only up to reset. */
@@ -151,9 +151,10 @@ view_sync_get_expunges(struct mail_index
const void *data;
unsigned int count, expunge_count = 0;
uint32_t prev_seq = 0;
+ bool reset;
int ret;
- if (view_sync_set_log_view_range(view, TRUE) < 0)
+ if (view_sync_set_log_view_range(view, TRUE, &reset) < 0)
return -1;
/* get a list of expunge transactions. there may be some that we have
@@ -263,7 +264,7 @@ int mail_index_view_sync_begin(struct ma
struct mail_index_map *map;
ARRAY_TYPE(seq_range) expunges = ARRAY_INIT;
unsigned int expunge_count = 0;
- bool sync_expunges;
+ bool reset, sync_expunges;
i_assert(!view->syncing);
i_assert(view->transactions == 0);
@@ -282,7 +283,7 @@ int mail_index_view_sync_begin(struct ma
return -1;
}
- if (view_sync_set_log_view_range(view, sync_expunges) < 0) {
+ if (view_sync_set_log_view_range(view, sync_expunges, &reset) < 0) {
if (array_is_created(&expunges))
array_free(&expunges);
return -1;
@@ -301,7 +302,7 @@ int mail_index_view_sync_begin(struct ma
view->sync_new_map = view->index->map;
view->sync_new_map->refcount++;
i_assert(view->index->map->hdr.messages_count >=
- ctx->finish_min_msg_count);
+ ctx->finish_min_msg_count || reset);
/* keep the old mapping without expunges until we're
fully synced */
More information about the dovecot-cvs
mailing list