[dovecot-cvs]
dovecot/src/lib-storage/index/mbox mbox-sync.c, 1.155, 1.156
cras at dovecot.org
cras at dovecot.org
Tue Apr 26 17:45:48 EEST 2005
Update of /var/lib/cvs/dovecot/src/lib-storage/index/mbox
In directory talvi:/tmp/cvs-serv19094/mbox
Modified Files:
mbox-sync.c
Log Message:
Don't try to handle UIDVALIDITY changes nicely after all. It causes
problems when within same transaction there are two different set of UIDs
being used.
Index: mbox-sync.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/mbox/mbox-sync.c,v
retrieving revision 1.155
retrieving revision 1.156
diff -u -d -r1.155 -r1.156
--- mbox-sync.c 26 Apr 2005 09:42:59 -0000 1.155
+++ mbox-sync.c 26 Apr 2005 14:45:46 -0000 1.156
@@ -927,7 +927,7 @@
const struct mail_index_record *rec;
uint32_t uid, messages_count;
uoff_t offset;
- int ret, expunged, skipped_mails, uidvalidity_changed;
+ int ret, expunged, skipped_mails;
messages_count =
mail_index_view_get_messages_count(sync_ctx->sync_view);
@@ -942,13 +942,10 @@
while ((ret = mbox_sync_read_next_mail(sync_ctx, mail_ctx)) > 0) {
uid = mail_ctx->mail.uid;
- uidvalidity_changed = mail_ctx->seq == 1 &&
- sync_ctx->base_uid_validity != 0 &&
- sync_ctx->hdr->uid_validity != 0 &&
- sync_ctx->base_uid_validity !=
- sync_ctx->hdr->uid_validity;
-
- if (uidvalidity_changed) {
+ if (mail_ctx->seq == 1 && sync_ctx->base_uid_validity != 0 &&
+ sync_ctx->hdr->uid_validity != 0 &&
+ sync_ctx->base_uid_validity !=
+ sync_ctx->hdr->uid_validity) {
mail_storage_set_critical(
STORAGE(sync_ctx->mbox->storage),
"UIDVALIDITY changed (%u -> %u) "
@@ -957,20 +954,8 @@
sync_ctx->base_uid_validity,
sync_ctx->mbox->path);
- /* we need to recreate all messages in index */
- while (sync_ctx->idx_seq <= messages_count) {
- mail_index_expunge(sync_ctx->t,
- sync_ctx->idx_seq++);
- }
-
- /* next_uid must be reset before message syncing
- begins, or we get errors about UIDs larger than
- next_uid. */
- sync_ctx->idx_next_uid = 0;
- mail_index_update_header(sync_ctx->t,
- offsetof(struct mail_index_header, next_uid),
- &sync_ctx->idx_next_uid,
- sizeof(sync_ctx->idx_next_uid), TRUE);
+ mail_index_mark_corrupted(sync_ctx->mbox->ibox.index);
+ return -1;
}
if (mail_ctx->uid_broken && partial) {
@@ -983,7 +968,7 @@
uid = 0;
rec = NULL; ret = 1;
- if (uid != 0 && !uidvalidity_changed) {
+ if (uid != 0) {
ret = mbox_sync_read_index_rec(sync_ctx, uid, &rec);
if (ret < 0)
return -1;
@@ -992,7 +977,7 @@
if (ret == 0) {
/* UID found but it's broken */
uid = 0;
- } else if (uid == 0 && !uidvalidity_changed &&
+ } else if (uid == 0 &&
!mail_ctx->pseudo &&
(sync_ctx->delay_writes ||
sync_ctx->idx_seq <= messages_count)) {
@@ -1015,7 +1000,7 @@
partial = FALSE;
}
- if (!mail_ctx->pseudo && !uidvalidity_changed) {
+ if (!mail_ctx->pseudo) {
/* get all sync records related to this message */
if (mbox_sync_read_index_syncs(sync_ctx, uid,
&expunged) < 0)
More information about the dovecot-cvs
mailing list