[dovecot-cvs] dovecot/src/lib-storage/index/maildir maildir-uidlist.c, 1.1, 1.2

cras at procontrol.fi cras at procontrol.fi
Thu Apr 29 00:41:26 EEST 2004


Update of /home/cvs/dovecot/src/lib-storage/index/maildir
In directory talvi:/tmp/cvs-serv13715/lib-storage/index/maildir

Modified Files:
	maildir-uidlist.c 
Log Message:
fixes



Index: maildir-uidlist.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/maildir/maildir-uidlist.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- maildir-uidlist.c	27 Apr 2004 20:25:54 -0000	1.1
+++ maildir-uidlist.c	28 Apr 2004 21:41:24 -0000	1.2
@@ -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)



More information about the dovecot-cvs mailing list