From: Timo Sirainen Date: Thu, 16 Apr 2009 00:24:37 +0000 (-0400) Subject: mail_search_args_[de]init() calls stack now. Last unref is still allowed without... X-Git-Tag: 2.0.alpha1~938 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=38537f71055adbbf214ba2a682f13d5947957298;p=thirdparty%2Fdovecot%2Fcore.git mail_search_args_[de]init() calls stack now. Last unref is still allowed without deiniting. --HG-- branch : HEAD --- diff --git a/src/lib-storage/mail-search.c b/src/lib-storage/mail-search.c index 04644c5f44..1e78dd39f2 100644 --- a/src/lib-storage/mail-search.c +++ b/src/lib-storage/mail-search.c @@ -122,7 +122,7 @@ void mail_search_args_init(struct mail_search_args *args, 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; } @@ -167,11 +167,10 @@ static void mail_search_args_deinit_sub(struct mail_search_args *args, 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; } @@ -229,10 +228,13 @@ void mail_search_args_unref(struct mail_search_args **_args) 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); } diff --git a/src/lib-storage/mail-search.h b/src/lib-storage/mail-search.h index eef386a2ae..f06d60c2b4 100644 --- a/src/lib-storage/mail-search.h +++ b/src/lib-storage/mail-search.h @@ -93,13 +93,13 @@ struct mail_search_arg { }; 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; };