[dovecot-cvs] dovecot/src/lib-index mail-cache-sync-update.c, 1.2,
1.3 mail-cache.c, 1.53, 1.54 mail-index-private.h, 1.34,
1.35 mail-index-sync-private.h, 1.15,
1.16 mail-index-sync-update.c, 1.54,
1.55 mail-index-view-sync.c, 1.27, 1.28 mail-index.c, 1.162, 1.163
cras at dovecot.org
cras at dovecot.org
Mon Nov 8 03:21:17 EET 2004
Update of /var/lib/cvs/dovecot/src/lib-index
In directory talvi:/tmp/cvs-serv19447/lib-index
Modified Files:
mail-cache-sync-update.c mail-cache.c mail-index-private.h
mail-index-sync-private.h mail-index-sync-update.c
mail-index-view-sync.c mail-index.c
Log Message:
Cache invalidating needed to hook into view syncing as well.
Index: mail-cache-sync-update.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-cache-sync-update.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- mail-cache-sync-update.c 8 Nov 2004 00:40:41 -0000 1.2
+++ mail-cache-sync-update.c 8 Nov 2004 01:21:14 -0000 1.3
@@ -115,7 +115,8 @@
(size_t)-1);
}
- if (*old_cache_offset == 0)
+ if (*old_cache_offset == 0 ||
+ sync_ctx->type != MAIL_INDEX_SYNC_HANDLER_INDEX)
return 1;
/* we'll need to link the old and new cache records */
Index: mail-cache.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-cache.c,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -d -r1.53 -r1.54
--- mail-cache.c 8 Nov 2004 00:55:02 -0000 1.53
+++ mail-cache.c 8 Nov 2004 01:21:14 -0000 1.54
@@ -270,7 +270,8 @@
mail_index_register_expunge_handler(index, cache->ext_id,
mail_cache_expunge_handler);
mail_index_register_sync_handler(index, cache->ext_id,
- mail_cache_sync_handler);
+ mail_cache_sync_handler,
+ cache->file_cache != NULL);
return cache;
}
Index: mail-index-private.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-private.h,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- mail-index-private.h 6 Nov 2004 17:20:18 -0000 1.34
+++ mail-index-private.h 8 Nov 2004 01:21:14 -0000 1.35
@@ -127,12 +127,23 @@
unsigned int fsck:1;
};
+enum mail_index_sync_handler_type {
+ MAIL_INDEX_SYNC_HANDLER_INDEX = 0x01,
+ MAIL_INDEX_SYNC_HANDLER_VIEW = 0x02
+};
+
+struct mail_index_sync_handler {
+ mail_index_sync_handler_t *callback;
+ enum mail_index_sync_handler_type type;
+};
+
/* Add/replace sync handler for specified extra record. */
void mail_index_register_expunge_handler(struct mail_index *index,
uint32_t ext_id,
mail_index_expunge_handler_t *cb);
void mail_index_register_sync_handler(struct mail_index *index, uint32_t ext_id,
- mail_index_sync_handler_t *cb);
+ mail_index_sync_handler_t *cb,
+ enum mail_index_sync_handler_type type);
int mail_index_write_base_header(struct mail_index *index,
const struct mail_index_header *hdr);
Index: mail-index-sync-private.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-sync-private.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- mail-index-sync-private.h 6 Nov 2004 17:20:18 -0000 1.15
+++ mail-index-sync-private.h 8 Nov 2004 01:21:14 -0000 1.16
@@ -40,6 +40,8 @@
buffer_t *extra_context_buf;
void **extra_context;
+ enum mail_index_sync_handler_type type;
+
unsigned int sync_handlers_initialized:1;
unsigned int expunge_handlers_set:1;
unsigned int expunge_handlers_used:1;
@@ -49,7 +51,9 @@
extern struct mail_transaction_map_functions mail_index_map_sync_funcs;
void mail_index_sync_map_init(struct mail_index_sync_map_ctx *sync_map_ctx,
- struct mail_index_view *view);
+ struct mail_index_view *view,
+ enum mail_index_sync_handler_type type);
+void mail_index_sync_map_deinit(struct mail_index_sync_map_ctx *sync_map_ctx);
int mail_index_sync_update_index(struct mail_index_sync_ctx *sync_ctx,
int sync_only_external);
Index: mail-index-sync-update.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-sync-update.c,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -d -r1.54 -r1.55
--- mail-index-sync-update.c 7 Nov 2004 18:44:58 -0000 1.54
+++ mail-index-sync-update.c 8 Nov 2004 01:21:14 -0000 1.55
@@ -109,12 +109,11 @@
buffer_get_modifyable_data(ctx->extra_context_buf, NULL);
ctx->expunge_handlers_set = FALSE;
- ctx->sync_handlers_initialized = TRUE;
}
static void mail_index_sync_deinit_handlers(struct mail_index_sync_map_ctx *ctx)
{
- mail_index_sync_handler_t *const *sync_handlers;
+ const struct mail_index_sync_handler *sync_handlers;
size_t i, size;
if (ctx->extra_context == NULL)
@@ -127,8 +126,8 @@
for (i = 0; i < size; i++) {
if (ctx->extra_context[i] != NULL) {
- sync_handlers[i](ctx, 0, NULL, NULL,
- &ctx->extra_context[i]);
+ sync_handlers[i].callback(ctx, 0, NULL, NULL,
+ &ctx->extra_context[i]);
}
}
@@ -216,7 +215,7 @@
if (seq1 == 0)
return 1;
- if (ctx->sync_handlers_initialized) {
+ if (ctx->type != MAIL_INDEX_SYNC_HANDLER_VIEW) {
if (!ctx->expunge_handlers_set)
mail_index_sync_init_expunge_handlers(ctx);
@@ -743,7 +742,7 @@
struct mail_index_sync_map_ctx *ctx = context;
struct mail_index_view *view = ctx->view;
struct mail_index_record *rec;
- mail_index_sync_handler_t *const *sync_handlers;
+ const struct mail_index_sync_handler *sync_handlers;
const struct mail_index_ext *ext;
void *old_data;
uint32_t seq;
@@ -769,9 +768,9 @@
sync_handlers += ctx->cur_ext_id;
/* call sync handlers only when we're syncing index (not view) */
- if (*sync_handlers != NULL && ctx->sync_handlers_initialized) {
- ret = (*sync_handlers)(ctx, seq, old_data, u + 1,
- &ctx->extra_context[ctx->cur_ext_id]);
+ if ((sync_handlers->type & ctx->type) != 0) {
+ ret = sync_handlers->callback(ctx, seq, old_data, u + 1,
+ &ctx->extra_context[ctx->cur_ext_id]);
if (ret <= 0)
return ret;
}
@@ -1009,11 +1008,22 @@
}
void mail_index_sync_map_init(struct mail_index_sync_map_ctx *sync_map_ctx,
- struct mail_index_view *view)
+ struct mail_index_view *view,
+ enum mail_index_sync_handler_type type)
{
memset(sync_map_ctx, 0, sizeof(*sync_map_ctx));
sync_map_ctx->view = view;
- sync_map_ctx->cur_ext_id = (uint32_t)-1;
+ sync_map_ctx->cur_ext_id = (uint32_t)-1;
+ sync_map_ctx->type = type;
+
+ mail_index_sync_init_handlers(sync_map_ctx);
+}
+
+void mail_index_sync_map_deinit(struct mail_index_sync_map_ctx *sync_map_ctx)
+{
+ if (sync_map_ctx->expunge_handlers_used)
+ mail_index_sync_deinit_expunge_handlers(sync_map_ctx);
+ mail_index_sync_deinit_handlers(sync_map_ctx);
}
int mail_index_sync_update_index(struct mail_index_sync_ctx *sync_ctx,
@@ -1031,8 +1041,8 @@
uoff_t offset;
int ret, had_dirty, skipped, check_ext_offsets;
- mail_index_sync_map_init(&sync_map_ctx, view);
- mail_index_sync_init_handlers(&sync_map_ctx);
+ mail_index_sync_map_init(&sync_map_ctx, view,
+ MAIL_INDEX_SYNC_HANDLER_INDEX);
/* we'll have to update view->lock_id to avoid mail_index_view_lock()
trying to update the file later. */
@@ -1113,10 +1123,7 @@
}
}
map = view->map;
-
- if (sync_map_ctx.expunge_handlers_used)
- mail_index_sync_deinit_expunge_handlers(&sync_map_ctx);
- mail_index_sync_deinit_handlers(&sync_map_ctx);
+ mail_index_sync_map_deinit(&sync_map_ctx);
if (ret < 0) {
mail_index_view_unlock(view);
Index: mail-index-view-sync.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-view-sync.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- mail-index-view-sync.c 6 Nov 2004 17:20:18 -0000 1.27
+++ mail-index-view-sync.c 8 Nov 2004 01:21:14 -0000 1.28
@@ -122,7 +122,8 @@
ctx->view = view;
ctx->trans_sync_mask = want_mask;
ctx->expunges = expunges;
- mail_index_sync_map_init(&ctx->sync_map_ctx, view);
+ mail_index_sync_map_init(&ctx->sync_map_ctx, view,
+ MAIL_INDEX_SYNC_HANDLER_VIEW);
if ((sync_mask & MAIL_INDEX_SYNC_TYPE_EXPUNGE) != 0) {
view->new_map = view->index->map;
Index: mail-index.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index.c,v
retrieving revision 1.162
retrieving revision 1.163
diff -u -d -r1.162 -r1.163
--- mail-index.c 7 Nov 2004 15:15:18 -0000 1.162
+++ mail-index.c 8 Nov 2004 01:21:14 -0000 1.163
@@ -27,7 +27,7 @@
index->extension_pool = pool_alloconly_create("extension", 256);
index->extensions = buffer_create_dynamic(index->extension_pool, 64);
- index->sync_handlers = buffer_create_dynamic(default_pool, 32);
+ index->sync_handlers = buffer_create_dynamic(default_pool, 64);
index->expunge_handlers = buffer_create_dynamic(default_pool, 32);
index->mode = 0600;
@@ -70,7 +70,7 @@
ext_count /= sizeof(*extensions);
i_assert(index->sync_handlers->used /
- sizeof(mail_index_sync_handler_t *) == ext_count);
+ sizeof(struct mail_index_sync_handler) == ext_count);
/* see if it's already there */
for (i = 0; i < ext_count; i++) {
@@ -86,7 +86,7 @@
buffer_append(index->extensions, &ext, sizeof(ext));
buffer_append_zero(index->sync_handlers,
- sizeof(mail_index_sync_handler_t *));
+ sizeof(struct mail_index_sync_handler));
return ext_count;
}
@@ -99,10 +99,15 @@
}
void mail_index_register_sync_handler(struct mail_index *index, uint32_t ext_id,
- mail_index_sync_handler_t *cb)
+ mail_index_sync_handler_t *cb,
+ enum mail_index_sync_handler_type type)
{
- buffer_write(index->sync_handlers, ext_id * sizeof(cb),
- &cb, sizeof(cb));
+ struct mail_index_sync_handler h;
+
+ memset(&h, 0, sizeof(h));
+ h.callback = cb;
+ h.type = type;
+ buffer_write(index->sync_handlers, ext_id * sizeof(h), &h, sizeof(h));
}
static void mail_index_map_init_extbufs(struct mail_index_map *map,
More information about the dovecot-cvs
mailing list