dovecot-2.1: lib-storage: Allocate MAILBOX_METADATA_CACHE_FIELDS...

dovecot at dovecot.org dovecot at dovecot.org
Sat Apr 28 17:34:31 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.1/rev/3b4c336ed01b
changeset: 14488:3b4c336ed01b
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Apr 28 17:33:34 2012 +0300
description:
lib-storage: Allocate MAILBOX_METADATA_CACHE_FIELDS from a new metadata mempool.

diffstat:

 src/lib-storage/index/index-status.c   |  12 +++++++++---
 src/lib-storage/mail-storage-private.h |   2 +-
 src/lib-storage/mail-storage.c         |   5 +++++
 3 files changed, 15 insertions(+), 4 deletions(-)

diffs (58 lines):

diff -r e8b80e0767ac -r 3b4c336ed01b src/lib-storage/index/index-status.c
--- a/src/lib-storage/index/index-status.c	Thu Apr 26 00:26:58 2012 +0300
+++ b/src/lib-storage/index/index-status.c	Sat Apr 28 17:33:34 2012 +0300
@@ -100,11 +100,17 @@
 	struct mailbox_cache_field *cf;
 	unsigned int i, count;
 
+	if (box->metadata_pool == NULL) {
+		box->metadata_pool =
+			pool_alloconly_create("mailbox metadata", 256);
+	}
+
 	fields = mail_cache_register_get_list(box->cache,
-					      pool_datastack_create(), &count);
+					      box->metadata_pool, &count);
 
-	cache_fields = t_new(ARRAY_TYPE(mailbox_cache_field), 1);
-	t_array_init(cache_fields, count);
+	cache_fields = p_new(box->metadata_pool,
+			     ARRAY_TYPE(mailbox_cache_field), 1);
+	p_array_init(cache_fields, box->metadata_pool, count);
 	for (i = 0; i < count; i++) {
 		dec = fields[i].decision & ~MAIL_CACHE_DECISION_FORCED;
 		if (dec != MAIL_CACHE_DECISION_NO) {
diff -r e8b80e0767ac -r 3b4c336ed01b src/lib-storage/mail-storage-private.h
--- a/src/lib-storage/mail-storage-private.h	Thu Apr 26 00:26:58 2012 +0300
+++ b/src/lib-storage/mail-storage-private.h	Sat Apr 28 17:33:34 2012 +0300
@@ -212,7 +212,7 @@
 
         struct mailbox_vfuncs v, *vlast;
 /* private: */
-	pool_t pool;
+	pool_t pool, metadata_pool;
 	/* Linked list of all mailboxes in this storage */
 	struct mailbox *prev, *next;
 
diff -r e8b80e0767ac -r 3b4c336ed01b src/lib-storage/mail-storage.c
--- a/src/lib-storage/mail-storage.c	Thu Apr 26 00:26:58 2012 +0300
+++ b/src/lib-storage/mail-storage.c	Sat Apr 28 17:33:34 2012 +0300
@@ -989,6 +989,8 @@
 
 	DLLIST_REMOVE(&box->storage->mailboxes, box);
 	mail_storage_obj_unref(box->storage);
+	if (box->metadata_pool != NULL)
+		pool_unref(&box->metadata_pool);
 	pool_unref(&box->pool);
 }
 
@@ -1282,6 +1284,9 @@
 {
 	memset(metadata_r, 0, sizeof(*metadata_r));
 
+	if (box->metadata_pool != NULL)
+		p_clear(box->metadata_pool);
+
 	if (box->v.get_metadata(box, items, metadata_r) < 0)
 		return -1;
 


More information about the dovecot-cvs mailing list