[dovecot-cvs] dovecot/src/lib-index mail-cache-compress.c, 1.25, 1.26 mail-index-sync.c, 1.37, 1.38 mail-index-transaction-private.h, 1.16, 1.17 mail-index-transaction.c, 1.33, 1.34 mail-index-view-private.h, 1.12, 1.13 mail-index.c, 1.163, 1.164 mail-index.h, 1.134, 1.135 mail-transaction-log.c, 1.71, 1.72

cras at dovecot.org cras at dovecot.org
Fri Nov 12 00:01:42 EET 2004


Update of /var/lib/cvs/dovecot/src/lib-index
In directory talvi:/tmp/cvs-serv13498/lib-index

Modified Files:
	mail-cache-compress.c mail-index-sync.c 
	mail-index-transaction-private.h mail-index-transaction.c 
	mail-index-view-private.h mail-index.c mail-index.h 
	mail-transaction-log.c 
Log Message:
Allow specifying to transaction if it's external. Make mail saving
transactions external to avoid problems with uids.



Index: mail-cache-compress.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-cache-compress.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- mail-cache-compress.c	8 Nov 2004 00:40:41 -0000	1.25
+++ mail-cache-compress.c	11 Nov 2004 22:01:39 -0000	1.26
@@ -137,7 +137,7 @@
 	}
 
 	cache_view = mail_cache_view_open(cache, view);
-	t = mail_index_transaction_begin(view, FALSE);
+	t = mail_index_transaction_begin(view, FALSE, TRUE);
 	output = o_stream_create_file(fd, default_pool, 0, FALSE);
 
 	memset(&hdr, 0, sizeof(hdr));

Index: mail-index-sync.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-sync.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -d -r1.37 -r1.38
--- mail-index-sync.c	25 Oct 2004 17:42:51 -0000	1.37
+++ mail-index-sync.c	11 Nov 2004 22:01:39 -0000	1.38
@@ -329,7 +329,6 @@
 	ctx->sync_dirty = sync_dirty;
 
 	ctx->view = mail_index_view_open(index);
-	ctx->view->external = TRUE;
 
 	if (mail_transaction_log_view_set(ctx->view->log_view,
 					  index->hdr->log_file_seq,

Index: mail-index-transaction-private.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-transaction-private.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- mail-index-transaction-private.h	6 Nov 2004 17:20:18 -0000	1.16
+++ mail-index-transaction-private.h	11 Nov 2004 22:01:39 -0000	1.17
@@ -26,6 +26,7 @@
         struct mail_cache_transaction_ctx *cache_trans_ctx;
 
 	unsigned int hide_transaction:1;
+	unsigned int external:1;
 	unsigned int hdr_changed:1;
 	unsigned int log_updates:1;
 };

Index: mail-index-transaction.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-transaction.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- mail-index-transaction.c	6 Nov 2004 17:20:18 -0000	1.33
+++ mail-index-transaction.c	11 Nov 2004 22:01:39 -0000	1.34
@@ -16,7 +16,8 @@
 static void mail_index_transaction_add_last(struct mail_index_transaction *t);
 
 struct mail_index_transaction *
-mail_index_transaction_begin(struct mail_index_view *view, int hide)
+mail_index_transaction_begin(struct mail_index_view *view,
+			     int hide, int external)
 {
 	struct mail_index_transaction *t;
 
@@ -27,6 +28,7 @@
 	t->refcount = 1;
 	t->view = view;
 	t->hide_transaction = hide;
+	t->external = external;
 	t->first_new_seq = mail_index_view_get_message_count(t->view)+1;
 	return t;
 }

Index: mail-index-view-private.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-view-private.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- mail-index-view-private.h	6 Nov 2004 17:20:18 -0000	1.12
+++ mail-index-view-private.h	11 Nov 2004 22:01:39 -0000	1.13
@@ -48,7 +48,6 @@
 
 	unsigned int inconsistent:1;
 	unsigned int syncing:1;
-	unsigned int external:1;
 };
 
 void mail_index_view_clone(struct mail_index_view *dest,

Index: mail-index.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index.c,v
retrieving revision 1.163
retrieving revision 1.164
diff -u -d -r1.163 -r1.164
--- mail-index.c	8 Nov 2004 01:21:14 -0000	1.163
+++ mail-index.c	11 Nov 2004 22:01:39 -0000	1.164
@@ -158,7 +158,7 @@
 			    uint32_t record_align, uint32_t reset_id)
 {
 	struct mail_index_ext *ext;
-	uint32_t idx, ext_id;
+	uint32_t idx, ext_id, empty_id = (uint32_t)-1;
 
 	if (map->extensions == NULL) {
                 mail_index_map_init_extbufs(map, 5);
@@ -180,6 +180,8 @@
 
 	ext_id = mail_index_ext_register(index, name, hdr_size,
 					 record_size, record_align);
+	while (map->ext_id_map->used < ext_id * sizeof(uint32_t))
+		buffer_append(map->ext_id_map, &empty_id, sizeof(empty_id));
 	buffer_write(map->ext_id_map, ext_id * sizeof(uint32_t),
 		     &idx, sizeof(idx));
 	return idx;

Index: mail-index.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index.h,v
retrieving revision 1.134
retrieving revision 1.135
diff -u -d -r1.134 -r1.135
--- mail-index.h	6 Nov 2004 17:20:19 -0000	1.134
+++ mail-index.h	11 Nov 2004 22:01:39 -0000	1.135
@@ -176,7 +176,8 @@
    multiple transactions open simultaneously. Note that committed transactions
    won't show up until you've synchronized mailbox (mail_index_sync_begin). */
 struct mail_index_transaction *
-mail_index_transaction_begin(struct mail_index_view *view, int hide);
+mail_index_transaction_begin(struct mail_index_view *view,
+			     int hide, int external);
 int mail_index_transaction_commit(struct mail_index_transaction *t,
 				  uint32_t *log_file_seq_r,
 				  uoff_t *log_file_offset_r);

Index: mail-transaction-log.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-transaction-log.c,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -d -r1.71 -r1.72
--- mail-transaction-log.c	7 Nov 2004 18:52:30 -0000	1.71
+++ mail-transaction-log.c	11 Nov 2004 22:01:39 -0000	1.72
@@ -1068,7 +1068,7 @@
 		buffer_append_zero(buf, 4 - (buf->used % 4));
 
 	return log_append_buffer(file, buf, NULL, MAIL_TRANSACTION_EXT_INTRO,
-				 t->view->external);
+				 t->external);
 }
 
 static int
@@ -1127,7 +1127,7 @@
 		if (ext_reset.new_reset_id != 0) {
 			if (log_append_buffer(file, buf, NULL,
 					      MAIL_TRANSACTION_EXT_RESET,
-					      t->view->external) < 0)
+					      t->external) < 0)
 				return -1;
 		}
 	}
@@ -1136,8 +1136,7 @@
 }
 
 static int log_append_ext_rec_updates(struct mail_transaction_log_file *file,
-				      struct mail_index_transaction *t,
-				      int external)
+				      struct mail_index_transaction *t)
 {
 	buffer_t **updates;
 	const uint32_t *reset;
@@ -1171,7 +1170,7 @@
 
 		if (log_append_buffer(file, updates[ext_id], NULL,
 				      MAIL_TRANSACTION_EXT_REC_UPDATE,
-				      external) < 0)
+				      t->external) < 0)
 			return -1;
 	}
 	return 0;
@@ -1201,7 +1200,7 @@
 	}
 
 	if (log->index->log_locked) {
-		i_assert(view->external);
+		i_assert(t->external);
 	} else {
 		if (mail_transaction_log_lock_head(log) < 0)
 			return -1;
@@ -1250,27 +1249,25 @@
 
 	if (t->appends != NULL && ret == 0) {
 		ret = log_append_buffer(file, t->appends, NULL,
-					MAIL_TRANSACTION_APPEND,
-					view->external);
+					MAIL_TRANSACTION_APPEND, t->external);
 	}
 	if (t->updates != NULL && ret == 0) {
 		ret = log_append_buffer(file, t->updates, NULL,
 					MAIL_TRANSACTION_FLAG_UPDATE,
-					view->external);
+					t->external);
 	}
 
 	if (t->ext_rec_updates != NULL && ret == 0)
-		ret = log_append_ext_rec_updates(file, t, view->external);
+		ret = log_append_ext_rec_updates(file, t);
 
 	if (t->expunges != NULL && ret == 0) {
 		ret = log_append_buffer(file, t->expunges, NULL,
-					MAIL_TRANSACTION_EXPUNGE,
-					view->external);
+					MAIL_TRANSACTION_EXPUNGE, t->external);
 	}
 	if (t->hdr_changed && ret == 0) {
 		ret = log_append_buffer(file, log_get_hdr_update_buffer(t),
 					NULL, MAIL_TRANSACTION_HEADER_UPDATE,
-					view->external);
+					t->external);
 	}
 
 	if (ret < 0) {



More information about the dovecot-cvs mailing list