const char *index_prefix;
enum mailbox_flags flags;
unsigned int transaction_count;
+ unsigned int attribute_iter_count;
enum mailbox_feature enabled_features;
struct mail_msgpart_partial_cache partial_cache;
uint32_t vsize_hdr_ext_id;
mailbox_close(box);
box->v.free(box);
+ if (box->attribute_iter_count != 0) {
+ i_panic("Trying to free mailbox %s with %u open attribute iterators",
+ box->name, box->attribute_iter_count);
+ }
+
DLLIST_REMOVE(&box->storage->mailboxes, box);
mail_storage_obj_unref(box->storage);
if (box->metadata_pool != NULL)
iter = box->v.attribute_iter_init(box, type, prefix);
i_assert(iter->box != NULL);
+ box->attribute_iter_count++;
/* check which internal attributes may apply */
t_array_init(&extra_attrs, 4);
int ret;
*_iter = NULL;
+
if (iter->box != NULL) {
/* not wrapped */
+ i_assert(iter->box->attribute_iter_count > 0);
+ iter->box->attribute_iter_count--;
return iter->box->v.attribute_iter_deinit(iter);
}
/* wrapped */
intiter = (struct mailbox_attribute_internal_iter *)iter;
+
+ i_assert(intiter->real_iter->box->attribute_iter_count > 0);
+ intiter->real_iter->box->attribute_iter_count--;
+
ret = intiter->real_iter->box->v.attribute_iter_deinit(intiter->real_iter);
array_free(&intiter->extra_attrs);
i_free(intiter);