changeset 2324:ea745d0c9c4b HEAD

Delay memory allocations for cache transaction. We don't always need it.
author Timo Sirainen <tss@iki.fi>
date Thu, 15 Jul 2004 15:26:31 +0300
parents ec1dac19cb06
children 7613e0f68513
files src/lib-index/mail-cache-transaction.c
diffstat 1 files changed, 9 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-cache-transaction.c	Mon Jul 12 21:14:45 2004 +0300
+++ b/src/lib-index/mail-cache-transaction.c	Thu Jul 15 15:26:31 2004 +0300
@@ -45,10 +45,6 @@
 	ctx->cache = view->cache;
 	ctx->view = view;
 	ctx->trans = t;
-	ctx->cache_data =
-		buffer_create_dynamic(system_pool, 32768, (size_t)-1);
-	ctx->cache_data_seq =
-		buffer_create_dynamic(system_pool, 256, (size_t)-1);
 	ctx->reservations =
 		buffer_create_dynamic(system_pool, 256, (size_t)-1);
 
@@ -64,8 +60,10 @@
 	ctx->view->transaction = NULL;
 	ctx->view->trans_seq1 = ctx->view->trans_seq2 = 0;
 
-	buffer_free(ctx->cache_data);
-	buffer_free(ctx->cache_data_seq);
+	if (ctx->cache_data != NULL)
+		buffer_free(ctx->cache_data);
+	if (ctx->cache_data_seq != NULL)
+		buffer_free(ctx->cache_data_seq);
 	buffer_free(ctx->reservations);
 	i_free(ctx);
 }
@@ -421,6 +419,11 @@
 		buffer_append(ctx->cache_data_seq, &ctx->prev_seq,
 			      sizeof(ctx->prev_seq));
 		ctx->prev_pos = size;
+	} else if (ctx->cache_data == NULL) {
+		ctx->cache_data =
+			buffer_create_dynamic(system_pool, 32768, (size_t)-1);
+		ctx->cache_data_seq =
+			buffer_create_dynamic(system_pool, 256, (size_t)-1);
 	}
 
 	memset(&new_rec, 0, sizeof(new_rec));