struct mailbox *box, bool change_uidsets,
const ARRAY_TYPE(seq_range) *search_saved_uidset)
{
- if (args->initialized) {
+ if (args->init_refcount++ > 0) {
i_assert(args->box == box);
return;
}
void mail_search_args_deinit(struct mail_search_args *args)
{
- if (args->refcount > 1 || !args->initialized)
+ if (--args->init_refcount > 0)
return;
mail_search_args_deinit_sub(args, args->args);
- args->initialized = FALSE;
args->box = NULL;
}
i_assert(args->refcount > 0);
*_args = NULL;
- if (--args->refcount > 0)
+ if (--args->refcount > 0) {
+ i_assert(args->init_refcount <= args->refcount);
return;
-
- mail_search_args_deinit(args);
+ }
+ i_assert(args->init_refcount <= 1);
+ if (args->init_refcount == 1)
+ mail_search_args_deinit(args);
pool_unref(&args->pool);
}
};
struct mail_search_args {
- int refcount;
+ int refcount, init_refcount;
+
pool_t pool;
struct mailbox *box;
struct mail_search_arg *args;
const char *charset;
- unsigned int initialized:1;
unsigned int simplified:1;
unsigned int have_inthreads:1;
};