]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Fix crash due to constructors init order
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 12 Oct 2019 08:53:08 +0000 (09:53 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 12 Oct 2019 08:53:08 +0000 (09:53 +0100)
Issue: #3079

src/libutil/mem_pool.c
src/lua/lua_regexp.c

index 7033376634d419981f7084352327a21e73849501..c01ce0c2cc819f03b931d4937a889be5e26c5cba 100644 (file)
@@ -111,7 +111,7 @@ pool_chain_free (struct _pool_chain *chain)
                        chain->slice_size - occupied : 0);
 }
 
-/* By default allocate 8Kb chunks of memory */
+/* By default allocate 4Kb chunks of memory */
 #define FIXED_POOL_SIZE 4096
 
 static inline struct rspamd_mempool_entry_point *
@@ -156,6 +156,7 @@ RSPAMD_DESTRUCTOR (rspamd_mempool_entries_dtor)
        });
 
        kh_destroy (mempool_entry, mempool_entries);
+       mempool_entries = NULL;
 }
 
 static inline struct rspamd_mempool_entry_point *
@@ -676,7 +677,7 @@ rspamd_mempool_delete (rspamd_mempool_t * pool)
                cur = pool->pools[RSPAMD_MEMPOOL_NORMAL];
        }
 
-       if (cur) {
+       if (cur && mempool_entries) {
                pool->entry->elts[pool->entry->cur_elts].leftover =
                                pool_chain_free (cur);
 
index ae1f2007ada5bc93b9ff5df0f27b9ef42869be0a..764bb6de10fa16249099bfe8d5315a38ed4ba691 100644 (file)
@@ -889,16 +889,16 @@ lua_load_regexp (lua_State * L)
 void
 luaopen_regexp (lua_State * L)
 {
+       if (!regexp_static_pool) {
+               regexp_static_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (),
+                               "regexp_lua_pool");
+       }
+
        rspamd_lua_new_class (L, "rspamd{regexp}", regexplib_m);
        lua_pop (L, 1);
        rspamd_lua_add_preload (L, "rspamd_regexp", lua_load_regexp);
 }
 
-RSPAMD_CONSTRUCTOR (lua_re_static_pool_ctor) {
-       regexp_static_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (),
-                       "regexp_lua_pool");
-}
-
 RSPAMD_DESTRUCTOR (lua_re_static_pool_dtor) {
        rspamd_mempool_delete (regexp_static_pool);
 }
\ No newline at end of file