This makes debugging easier.
uint32_t keywords_ext_id;
uint32_t modseq_ext_id;
- unsigned int view_count;
+ struct mail_index_view *views;
/* Module-specific contexts. */
ARRAY(union mail_index_module_context *) module_contexts;
};
struct mail_index_transaction {
+ struct mail_index_transaction *prev, *next;
int refcount;
enum mail_index_transaction_flags flags;
#include "ioloop.h"
#include "array.h"
#include "bsearch-insert-pos.h"
+#include "llist.h"
#include "mail-index-private.h"
#include "mail-transaction-log-private.h"
#include "mail-index-transaction-private.h"
mail_index_transaction_reset_v(t);
+ DLLIST_REMOVE(&t->view->transactions_list, t);
array_free(&t->module_contexts);
mail_index_view_transaction_unref(t->view);
if (t->latest_view != NULL)
i_array_init(&t->module_contexts,
I_MIN(5, mail_index_module_register.id));
+ DLLIST_PREPEND(&view->transactions_list, t);
if (hook_mail_index_transaction_created != NULL)
hook_mail_index_transaction_created(t);
};
struct mail_index_view {
+ struct mail_index_view *prev, *next;
int refcount;
struct mail_index_view_vfuncs v;
/* Module-specific contexts. */
ARRAY(union mail_index_view_module_context *) module_contexts;
+ struct mail_index_transaction *transactions_list;
int transactions;
unsigned int inconsistent:1;
#include "lib.h"
#include "array.h"
#include "buffer.h"
+#include "llist.h"
#include "mail-index-view-private.h"
#include "mail-transaction-log.h"
i_array_init(&dest->module_contexts,
I_MIN(5, mail_index_module_register.id));
- dest->index->view_count++;
+ DLLIST_PREPEND(&dest->index->views, dest);
}
void mail_index_view_ref(struct mail_index_view *view)
static void view_close(struct mail_index_view *view)
{
i_assert(view->refcount == 0);
- i_assert(view->index->view_count > 0);
+ i_assert(view->index->views != NULL);
- view->index->view_count--;
+ DLLIST_REMOVE(&view->index->views, view);
mail_transaction_log_view_close(&view->log_view);
i_array_init(&view->module_contexts,
I_MIN(5, mail_index_module_register.id));
-
- index->view_count++;
+ DLLIST_PREPEND(&index->views, view);
return view;
}
return;
i_assert(!index->syncing);
- i_assert(index->view_count == 0);
+ i_assert(index->views == NULL);
if (index->map != NULL)
mail_index_unmap(&index->map);