[dovecot-cvs] dovecot/src/lib-index mail-index-private.h, 1.58,
1.59 mail-index-sync-ext.c, 1.13,
1.14 mail-index-transaction-view.c, 1.14,
1.15 mail-index-transaction.c, 1.69, 1.70 mail-index.c, 1.209,
1.210 mail-transaction-log-append.c, 1.12, 1.13
cras at dovecot.org
cras at dovecot.org
Fri Jan 6 14:48:57 EET 2006
Update of /var/lib/cvs/dovecot/src/lib-index
In directory talvi:/tmp/cvs-serv16722
Modified Files:
mail-index-private.h mail-index-sync-ext.c
mail-index-transaction-view.c mail-index-transaction.c
mail-index.c mail-transaction-log-append.c
Log Message:
Cleanup: Created mail_index_registered_ext which is used for
index->extensions array. Put sync_handler to it and removed sync_handlers
array.
Index: mail-index-private.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-private.h,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -d -r1.58 -r1.59
--- mail-index-private.h 2 Jan 2006 12:22:41 -0000 1.58
+++ mail-index-private.h 6 Jan 2006 12:48:55 -0000 1.59
@@ -45,8 +45,8 @@
const char *name;
uint32_t index_idx; /* index ext_id */
uint32_t reset_id;
- uint32_t hdr_offset; /* points to data[] */
- uint32_t hdr_size; /* size of data[] */
+ uint32_t hdr_offset; /* points to mail_index_ext_header.data[] */
+ uint32_t hdr_size; /* size of mail_index_ext_header.data[] */
uint16_t record_offset;
uint16_t record_size;
uint16_t record_align;
@@ -74,6 +74,26 @@
uint32_t name_offset; /* relative to beginning of name[] */
};
+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;
+};
+
+struct mail_index_registered_ext {
+ const char *name;
+ uint32_t index_idx; /* index ext_id */
+ uint32_t hdr_size; /* size of mail_index_ext_header.data[] */
+ uint16_t record_size;
+ uint16_t record_align;
+
+ struct mail_index_sync_handler sync_handler;
+};
+
struct mail_index_map {
int refcount;
@@ -113,10 +133,9 @@
gid_t gid;
pool_t extension_pool;
- array_t ARRAY_DEFINE(extensions, struct mail_index_ext);
+ array_t ARRAY_DEFINE(extensions, struct mail_index_registered_ext);
array_t ARRAY_DEFINE(expunge_handlers, mail_index_expunge_handler_t *);
- array_t ARRAY_DEFINE(sync_handlers, struct mail_index_sync_handler);
array_t ARRAY_DEFINE(sync_lost_handlers,
mail_index_sync_lost_handler_t *);
@@ -159,16 +178,6 @@
unsigned int mapping: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,
Index: mail-index-sync-ext.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-sync-ext.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- mail-index-sync-ext.c 2 Jan 2006 12:22:41 -0000 1.13
+++ mail-index-sync-ext.c 6 Jan 2006 12:48:55 -0000 1.14
@@ -101,34 +101,30 @@
void mail_index_sync_deinit_handlers(struct mail_index_sync_map_ctx *ctx)
{
- const struct mail_index_sync_handler *sync_handlers;
const struct mail_index_ext *ext;
+ const struct mail_index_registered_ext *rext;
void **extra_contexts;
- unsigned int i, count, synch_count, context_count;
+ unsigned int i, count, rext_count, context_count;
if (!array_is_created(&ctx->extra_contexts))
return;
- sync_handlers =
- array_get(&ctx->view->index->sync_handlers, &synch_count);
-
if (!array_is_created(&ctx->view->map->extensions)) {
ext = NULL;
count = 0;
} else {
ext = array_get(&ctx->view->map->extensions, &count);
- i_assert(count <= synch_count);
}
+ rext = array_get(&ctx->view->index->extensions, &rext_count);
- /* sync_handlers[] is ordered by index->extensions while
- extra_contexts[] is ordered by map->extensions. */
+ /* extra_contexts[] is ordered by map->extensions. */
extra_contexts =
array_get_modifyable(&ctx->extra_contexts, &context_count);
i_assert(count <= context_count);
for (i = 0; i < count; i++) {
if (extra_contexts[i] != NULL) {
- sync_handlers[ext[i].index_idx].
+ rext[ext[i].index_idx].sync_handler.
callback(ctx, 0, NULL, NULL,
&extra_contexts[i]);
}
@@ -518,8 +514,8 @@
{
struct mail_index_view *view = ctx->view;
struct mail_index_record *rec;
- const struct mail_index_sync_handler *sync_handlers;
const struct mail_index_ext *ext;
+ const struct mail_index_registered_ext *rext;
void *old_data;
uint32_t seq;
int ret;
@@ -538,15 +534,16 @@
rec = MAIL_INDEX_MAP_IDX(view->map, seq-1);
old_data = PTR_OFFSET(rec, ext->record_offset);
- sync_handlers = array_idx(&view->index->sync_handlers, ext->index_idx);
+ rext = array_idx(&view->index->extensions, ext->index_idx);
- /* call sync handlers only when we're syncing index (not view) */
- if ((sync_handlers->type & ctx->type) != 0) {
+ /* call sync handlers only when its registered type matches with
+ current synchronization type (index/view) */
+ if ((rext->sync_handler.type & ctx->type) != 0) {
void **extra_context =
array_idx_modifyable(&ctx->extra_contexts,
ctx->cur_ext_id);
- ret = sync_handlers->callback(ctx, seq, old_data, u + 1,
- extra_context);
+ ret = rext->sync_handler.callback(ctx, seq, old_data, u + 1,
+ extra_context);
if (ret <= 0)
return ret;
}
Index: mail-index-transaction-view.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-transaction-view.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- mail-index-transaction-view.c 4 Jul 2005 11:32:20 -0000 1.14
+++ mail-index-transaction-view.c 6 Jan 2006 12:48:55 -0000 1.15
@@ -136,7 +136,6 @@
{
struct mail_index_view_transaction *tview =
(struct mail_index_view_transaction *)view;
- const struct mail_index_ext *ext;
const array_t *ext_buf;
ARRAY_SET_TYPE(ext_buf, void *);
const void *data;
@@ -146,7 +145,6 @@
*map_r = view->index->map;
- ext = array_idx(&view->index->extensions, ext_id);
if (array_is_created(&tview->t->ext_rec_updates) &&
ext_id < array_count(&tview->t->ext_rec_updates)) {
/* there are some ext updates in transaction.
Index: mail-index-transaction.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-transaction.c,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -d -r1.69 -r1.70
--- mail-index-transaction.c 21 Dec 2005 18:41:50 -0000 1.69
+++ mail-index-transaction.c 6 Jan 2006 12:48:55 -0000 1.70
@@ -627,22 +627,32 @@
uint16_t record_align)
{
struct mail_transaction_ext_intro intro;
- const struct mail_index_ext *ext;
+ uint32_t old_record_size, old_record_align;
memset(&intro, 0, sizeof(intro));
+ /* get ext_id from transaction's map if it's there */
if (!mail_index_map_get_ext_idx(t->view->map, ext_id, &intro.ext_id)) {
+ /* have to create it */
+ const struct mail_index_registered_ext *rext;
+
intro.ext_id = (uint32_t)-1;
- ext = array_idx(&t->view->index->extensions, ext_id);
+ rext = array_idx(&t->view->index->extensions, ext_id);
+ old_record_size = rext->record_size;
+ old_record_align = rext->record_align;
} else {
+ const struct mail_index_ext *ext;
+
ext = array_idx(&t->view->map->extensions, ext_id);
+ old_record_size = ext->record_size;
+ old_record_align = ext->record_align;
}
/* allow only header size changes if extension records have already
been changed in transaction */
i_assert(!array_is_created(&t->ext_rec_updates) ||
- (ext->record_size == record_size &&
- ext->record_align == record_align));
+ (old_record_size == record_size &&
+ old_record_align == record_align));
t->log_updates = TRUE;
@@ -693,7 +703,7 @@
uint32_t ext_id, const void *data, void *old_data_r)
{
struct mail_index *index = t->view->index;
- const struct mail_index_ext *ext;
+ const struct mail_index_registered_ext *rext;
const struct mail_transaction_ext_intro *intro;
uint16_t record_size;
array_t *array;
@@ -716,8 +726,8 @@
/* resized record */
record_size = intro[ext_id].record_size;
} else {
- ext = array_idx(&index->extensions, ext_id);
- record_size = ext->record_size;
+ rext = array_idx(&index->extensions, ext_id);
+ record_size = rext->record_size;
}
if (!array_is_created(&t->ext_rec_updates)) {
Index: mail-index.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index.c,v
retrieving revision 1.209
retrieving revision 1.210
diff -u -d -r1.209 -r1.210
--- mail-index.c 18 Sep 2005 15:40:30 -0000 1.209
+++ mail-index.c 6 Jan 2006 12:48:55 -0000 1.210
@@ -32,12 +32,10 @@
index->extension_pool = pool_alloconly_create("extension", 512);
ARRAY_CREATE(&index->extensions, index->extension_pool,
- struct mail_index_ext, 5);
+ struct mail_index_registered_ext, 5);
ARRAY_CREATE(&index->expunge_handlers, default_pool,
mail_index_expunge_handler_t *, 4);
- ARRAY_CREATE(&index->sync_handlers, default_pool,
- struct mail_index_sync_handler, 4);
ARRAY_CREATE(&index->sync_lost_handlers, default_pool,
mail_index_sync_lost_handler_t *, 4);
@@ -62,7 +60,6 @@
pool_unref(index->extension_pool);
pool_unref(index->keywords_pool);
- array_free(&index->sync_handlers);
array_free(&index->sync_lost_handlers);
array_free(&index->expunge_handlers);
array_free(&index->keywords);
@@ -85,29 +82,26 @@
uint16_t default_record_size,
uint16_t default_record_align)
{
- const struct mail_index_ext *extensions;
- struct mail_index_ext ext;
+ const struct mail_index_registered_ext *extensions;
+ struct mail_index_registered_ext rext;
unsigned int i, ext_count;
extensions = array_get(&index->extensions, &ext_count);
- i_assert(array_count(&index->sync_handlers) == ext_count);
-
/* see if it's already there */
for (i = 0; i < ext_count; i++) {
if (strcmp(extensions[i].name, name) == 0)
return i;
}
- memset(&ext, 0, sizeof(ext));
- ext.name = p_strdup(index->extension_pool, name);
- ext.index_idx = ext_count;
- ext.hdr_size = default_hdr_size;
- ext.record_size = default_record_size;
- ext.record_align = default_record_align;
+ memset(&rext, 0, sizeof(rext));
+ rext.name = p_strdup(index->extension_pool, name);
+ rext.index_idx = ext_count;
+ rext.hdr_size = default_hdr_size;
+ rext.record_size = default_record_size;
+ rext.record_align = default_record_align;
- array_append(&index->extensions, &ext, 1);
- (void)array_append_space(&index->sync_handlers);
+ array_append(&index->extensions, &rext, 1);
return ext_count;
}
@@ -138,25 +132,25 @@
mail_index_sync_handler_t *cb,
enum mail_index_sync_handler_type type)
{
- struct mail_index_sync_handler *h;
+ struct mail_index_registered_ext *rext;
- h = array_idx_modifyable(&index->sync_handlers, ext_id);
- i_assert(h->callback == NULL);
+ rext = array_idx_modifyable(&index->extensions, ext_id);
+ i_assert(rext->sync_handler.callback == NULL);
- h->callback = cb;
- h->type = type;
+ rext->sync_handler.callback = cb;
+ rext->sync_handler.type = type;
}
void mail_index_unregister_sync_handler(struct mail_index *index,
uint32_t ext_id)
{
- struct mail_index_sync_handler *h;
+ struct mail_index_registered_ext *rext;
- h = array_idx_modifyable(&index->sync_handlers, ext_id);
- i_assert(h->callback != NULL);
+ rext = array_idx_modifyable(&index->extensions, ext_id);
+ i_assert(rext->sync_handler.callback != NULL);
- h->callback = NULL;
- h->type = 0;
+ rext->sync_handler.callback = NULL;
+ rext->sync_handler.type = 0;
}
void mail_index_register_sync_lost_handler(struct mail_index *index,
Index: mail-transaction-log-append.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-transaction-log-append.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- mail-transaction-log-append.c 18 Aug 2005 16:55:25 -0000 1.12
+++ mail-transaction-log-append.c 6 Jan 2006 12:48:55 -0000 1.13
@@ -117,7 +117,7 @@
struct mail_index_transaction *t,
uint32_t ext_id, uint32_t reset_id)
{
- const struct mail_index_ext *ext;
+ const struct mail_index_registered_ext *rext;
struct mail_transaction_ext_intro *intro;
buffer_t *buf;
uint32_t idx;
@@ -128,7 +128,7 @@
idx = (uint32_t)-1;
}
- ext = array_idx(&t->view->index->extensions, ext_id);
+ rext = array_idx(&t->view->index->extensions, ext_id);
if (!array_is_created(&t->ext_resizes)) {
intro = NULL;
count = 0;
@@ -143,17 +143,17 @@
i_assert(intro->ext_id == idx);
intro->name_size = idx != (uint32_t)-1 ? 0 :
- strlen(ext->name);
+ strlen(rext->name);
buffer_append(buf, intro, sizeof(*intro));
} else {
/* generate a new intro structure */
intro = buffer_append_space_unsafe(buf, sizeof(*intro));
intro->ext_id = idx;
- intro->hdr_size = ext->hdr_size;
- intro->record_size = ext->record_size;
- intro->record_align = ext->record_align;
+ intro->hdr_size = rext->hdr_size;
+ intro->record_size = rext->record_size;
+ intro->record_align = rext->record_align;
intro->name_size = idx != (uint32_t)-1 ? 0 :
- strlen(ext->name);
+ strlen(rext->name);
}
if (reset_id != 0) {
/* we're going to reset this extension in this transaction */
@@ -166,7 +166,7 @@
} else {
/* new extension, reset_id defaults to 0 */
}
- buffer_append(buf, ext->name, intro->name_size);
+ buffer_append(buf, rext->name, intro->name_size);
if ((buf->used % 4) != 0)
buffer_append_zero(buf, 4 - (buf->used % 4));
More information about the dovecot-cvs
mailing list