changeset 6346:5dcd55d1a47f HEAD

Complain about unknown extension introduction IDs in log only once per sync.
author Timo Sirainen <tss@iki.fi>
date Sun, 02 Sep 2007 03:32:45 +0300
parents 1829e8e32ddc
children aeaaaaeb64a6
files src/lib-index/mail-index-sync-ext.c src/lib-index/mail-index-sync-private.h src/lib-index/mail-index-sync-update.c
diffstat 3 files changed, 24 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-index-sync-ext.c	Sun Sep 02 03:13:19 2007 +0300
+++ b/src/lib-index/mail-index-sync-ext.c	Sun Sep 02 03:32:45 2007 +0300
@@ -331,6 +331,25 @@
 	}
 }
 
+static bool
+mail_index_sync_ext_unknown_complain(struct mail_index_sync_map_ctx *ctx,
+				     uint32_t ext_id)
+{
+	unsigned char *p;
+
+	if (ctx->unknown_extensions == NULL) {
+		ctx->unknown_extensions =
+			buffer_create_dynamic(default_pool, ext_id + 8);
+	}
+	p = buffer_get_space_unsafe(ctx->unknown_extensions, ext_id, 1);
+	if (*p != 0) {
+		/* we've already complained once */
+		return FALSE;
+	}
+	*p = 1;
+	return TRUE;
+}
+
 int mail_index_sync_ext_intro(struct mail_index_sync_map_ctx *ctx,
 			      const struct mail_transaction_ext_intro *u)
 {
@@ -344,6 +363,8 @@
 	if (u->ext_id != (uint32_t)-1 &&
 	    (!array_is_created(&map->extensions) ||
 	     u->ext_id >= array_count(&map->extensions))) {
+		if (!mail_index_sync_ext_unknown_complain(ctx, u->ext_id))
+			return -1;
 		mail_index_sync_set_corrupted(ctx,
 			"Extension introduction for unknown id %u", u->ext_id);
 		return -1;
--- a/src/lib-index/mail-index-sync-private.h	Sun Sep 02 03:13:19 2007 +0300
+++ b/src/lib-index/mail-index-sync-private.h	Sun Sep 02 03:32:45 2007 +0300
@@ -31,6 +31,7 @@
 
 	ARRAY_DEFINE(expunge_handlers, struct mail_index_expunge_handler);
 	ARRAY_DEFINE(extra_contexts, void *);
+	buffer_t *unknown_extensions;
 
         enum mail_index_sync_handler_type type;
 
--- a/src/lib-index/mail-index-sync-update.c	Sun Sep 02 03:13:19 2007 +0300
+++ b/src/lib-index/mail-index-sync-update.c	Sun Sep 02 03:32:45 2007 +0300
@@ -617,6 +617,8 @@
 
 void mail_index_sync_map_deinit(struct mail_index_sync_map_ctx *sync_map_ctx)
 {
+	if (sync_map_ctx->unknown_extensions != NULL)
+		buffer_free(sync_map_ctx->unknown_extensions);
 	if (sync_map_ctx->expunge_handlers_used)
 		mail_index_sync_deinit_expunge_handlers(sync_map_ctx);
 	mail_index_sync_deinit_handlers(sync_map_ctx);