]> source.dussan.org Git - rspamd.git/commitdiff
Revert "Preserve destructors order as LIFO."
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 17 Jan 2015 16:57:46 +0000 (16:57 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 17 Jan 2015 16:57:46 +0000 (16:57 +0000)
That change was completely incorrect.

This reverts commit 1f2c83f096f28ce79e828edd1ab545a341f10451.

src/libutil/mem_pool.c
src/libutil/mem_pool.h

index a292c082ac89ec167dea308cb18d369efc0431b6..6c9ee6f1637ab4cf3786bd73834eeb55d71f04ab 100644 (file)
@@ -27,7 +27,6 @@
 #include "fstring.h"
 #include "logger.h"
 #include "util.h"
-#include "utlist.h"
 #include "main.h"
 
 /* Sleep time for spin lock in nanoseconds */
@@ -541,7 +540,8 @@ rspamd_mempool_add_destructor_full (rspamd_mempool_t * pool,
                cur->data = data;
                cur->function = function;
                cur->loc = line;
-               DL_APPEND (pool->destructors, cur);
+               cur->prev = pool->destructors;
+               pool->destructors = cur;
                POOL_MTX_UNLOCK ();
        }
 }
@@ -554,12 +554,14 @@ rspamd_mempool_replace_destructor (rspamd_mempool_t * pool,
 {
        struct _pool_destructors *tmp;
 
-       DL_FOREACH (pool->destructors, tmp) {
+       tmp = pool->destructors;
+       while (tmp) {
                if (tmp->func == func && tmp->data == old_data) {
                        tmp->func = func;
                        tmp->data = new_data;
                        break;
                }
+               tmp = tmp->prev;
        }
 
 }
@@ -569,15 +571,16 @@ rspamd_mempool_delete (rspamd_mempool_t * pool)
 {
        struct _pool_chain *cur = pool->first_pool, *tmp;
        struct _pool_chain_shared *cur_shared = pool->shared_pool, *tmp_shared;
-       struct _pool_destructors *destructor;
+       struct _pool_destructors *destructor = pool->destructors;
 
        POOL_MTX_LOCK ();
        /* Call all pool destructors */
-       DL_FOREACH (pool->destructors, destructor) {
+       while (destructor) {
                /* Avoid calling destructors for NULL pointers */
                if (destructor->data != NULL) {
                        destructor->func (destructor->data);
                }
+               destructor = destructor->prev;
        }
 
        while (cur) {
index 4552e8ca330f866c2b2208546e52649e92bd84a7..7403ced29bec05a1893885af52fd0c40602d52c8 100644 (file)
@@ -78,7 +78,7 @@ struct _pool_destructors {
        void *data;                             /**< data to free                                                       */
        const gchar *function;                  /**< function from which this destructor was added */
        const gchar *loc;                       /**< line number                            */
-       struct _pool_destructors *prev, *next;  /**< chain link                                                         */
+       struct _pool_destructors *prev;         /**< chain link                                                         */
 };
 
 /**