]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
mail_search_args_[de]init() calls stack now. Last unref is still allowed without...
authorTimo Sirainen <tss@iki.fi>
Thu, 16 Apr 2009 00:24:37 +0000 (20:24 -0400)
committerTimo Sirainen <tss@iki.fi>
Thu, 16 Apr 2009 00:24:37 +0000 (20:24 -0400)
--HG--
branch : HEAD

src/lib-storage/mail-search.c
src/lib-storage/mail-search.h

index 04644c5f4481437c2d4059a381aff3688a94e01e..1e78dd39f2a6d870bc534bbe89b5ad0f4e846576 100644 (file)
@@ -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);
 }
 
index eef386a2ae3900dc51cfce8ad2114b7e876773df..f06d60c2b4fcbc5c3ec8c84aad6fae853841c789 100644 (file)
@@ -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;
 };