changeset 1931:35a947481130 HEAD

fixes
author Timo Sirainen <tss@iki.fi>
date Thu, 29 Apr 2004 00:41:24 +0300
parents 8f31c6dae363
children f04ff2a2ad5d
files src/lib-storage/index/index-sync.c src/lib-storage/index/maildir/maildir-uidlist.c
diffstat 2 files changed, 21 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/index-sync.c	Wed Apr 28 23:51:22 2004 +0300
+++ b/src/lib-storage/index/index-sync.c	Thu Apr 29 00:41:24 2004 +0300
@@ -67,6 +67,9 @@
 		}
 	}
 
+	if (ret < 0)
+		mail_storage_set_index_error(ibox);
+
 	if (sc->expunge != NULL) {
 		for (i = expunges_count*2; i > 0; i -= 2) {
 			for (seq = expunges[i-1]; seq >= expunges[i-2]; seq--)
@@ -81,9 +84,6 @@
 		sc->new_messages(&ibox->box, new_count, 0, sc_context);
 	}
 
-	if (ret < 0)
-		mail_storage_set_index_error(ibox);
-
 	mail_index_view_unlock(ibox->view);
 	return ret;
 }
--- a/src/lib-storage/index/maildir/maildir-uidlist.c	Wed Apr 28 23:51:22 2004 +0300
+++ b/src/lib-storage/index/maildir/maildir-uidlist.c	Thu Apr 29 00:41:24 2004 +0300
@@ -79,6 +79,8 @@
 	if (fd == -1) {
 		if (errno == EAGAIN)
 			return 0;
+		mail_storage_set_critical(uidlist->ibox->box.storage,
+			"file_dotlock_open(%s) failed: %m", path);
 		return -1;
 	}
 
@@ -123,10 +125,10 @@
 {
 	i_assert(!UIDLIST_IS_LOCKED(uidlist));
 
+	hash_destroy(uidlist->files);
 	if (uidlist->filename_pool != NULL)
 		pool_unref(uidlist->filename_pool);
 
-	hash_destroy(uidlist->files);
 	buffer_free(uidlist->record_buf);
 	i_free(uidlist->fname);
 	i_free(uidlist);
@@ -237,12 +239,16 @@
 		return -1;
 	}
 
+	hash_clear(uidlist->files, FALSE);
 	if (uidlist->filename_pool != NULL)
-		pool_unref(uidlist->filename_pool);
-	uidlist->filename_pool =
-		pool_alloconly_create("uidlist filename_pool",
-				      nearest_power(st.st_size -
-						    st.st_size/8));
+		p_clear(uidlist->filename_pool);
+	else {
+		uidlist->filename_pool =
+			pool_alloconly_create("uidlist filename_pool",
+					      nearest_power(st.st_size -
+							    st.st_size/8));
+	}
+
 	buffer_set_used_size(uidlist->record_buf, 0);
 	uidlist->version = 0;
 
@@ -457,6 +463,8 @@
 			   been added */
 			ret = maildir_uidlist_try_lock(ctx->uidlist);
 			if (ret <= 0) {
+				if (ret == 0)
+					return 1; // FIXME: does it work right?
 				ctx->failed = TRUE;
 				return -1;
 			}
@@ -548,14 +556,14 @@
 	for (; dest < size; dest++)
 		rec[dest].uid = uidlist->next_uid++;
 
+	hash_destroy(uidlist->files);
+	uidlist->files = ctx->files;
+	ctx->files = NULL;
+
 	if (uidlist->filename_pool != NULL)
 		pool_unref(uidlist->filename_pool);
 	uidlist->filename_pool = ctx->filename_pool;
 	ctx->filename_pool = NULL;
-
-	hash_destroy(uidlist->files);
-	uidlist->files = ctx->files;
-	ctx->files = NULL;
 }
 
 int maildir_uidlist_sync_deinit(struct maildir_uidlist_sync_ctx *ctx)