]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Allow to set custom pool for a task
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 8 Jun 2017 18:16:56 +0000 (19:16 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 8 Jun 2017 18:16:56 +0000 (19:16 +0100)
src/controller.c
src/libserver/task.c
src/libserver/task.h
src/lua/lua_util.c
src/plugins/fuzzy_check.c
src/rspamadm/lua_repl.c
src/rspamd_proxy.c
src/worker.c

index 9806e119ede56e7594f0a5c8bf48234b305b6f47..052525750c42e251de7ef4cebb6ae303a938469e 100644 (file)
@@ -1464,7 +1464,8 @@ rspamd_controller_handle_lua_history (lua_State *L,
                        lua_gettable (L, -2);
 
                        if (lua_isfunction (L, -1)) {
-                               task = rspamd_task_new (session->ctx->worker, session->cfg);
+                               task = rspamd_task_new (session->ctx->worker, session->cfg,
+                                               NULL);
 
                                task->resolver = ctx->resolver;
                                task->ev_base = ctx->ev_base;
@@ -1762,7 +1763,7 @@ rspamd_controller_handle_lua (struct rspamd_http_connection_entry *conn_ent,
                return 0;
        }
 
-       task = rspamd_task_new (session->ctx->worker, session->cfg);
+       task = rspamd_task_new (session->ctx->worker, session->cfg, NULL);
 
        task->resolver = ctx->resolver;
        task->ev_base = ctx->ev_base;
@@ -1945,7 +1946,7 @@ rspamd_controller_handle_learn_common (
                return 0;
        }
 
-       task = rspamd_task_new (session->ctx->worker, session->cfg);
+       task = rspamd_task_new (session->ctx->worker, session->cfg, NULL);
 
        task->resolver = ctx->resolver;
        task->ev_base = ctx->ev_base;
@@ -2045,7 +2046,7 @@ rspamd_controller_handle_scan (struct rspamd_http_connection_entry *conn_ent,
                return 0;
        }
 
-       task = rspamd_task_new (session->ctx->worker, session->cfg);
+       task = rspamd_task_new (session->ctx->worker, session->cfg, NULL);
        task->ev_base = session->ctx->ev_base;
 
        task->resolver = ctx->resolver;
@@ -2543,7 +2544,7 @@ rspamd_controller_handle_stat_common (
        rspamd_mempool_stat (&mem_st);
        memcpy (&stat_copy, session->ctx->worker->srv->stat, sizeof (stat_copy));
        stat = &stat_copy;
-       task = rspamd_task_new (session->ctx->worker, session->cfg);
+       task = rspamd_task_new (session->ctx->worker, session->cfg, NULL);
 
        ctx = session->ctx;
        task->resolver = ctx->resolver;
@@ -2877,7 +2878,7 @@ rspamd_controller_handle_lua_plugin (struct rspamd_http_connection_entry *conn_e
                return 0;
        }
 
-       task = rspamd_task_new (session->ctx->worker, session->cfg);
+       task = rspamd_task_new (session->ctx->worker, session->cfg, NULL);
 
        task->resolver = ctx->resolver;
        task->ev_base = ctx->ev_base;
index 2c9f134bce0e6b5999f7de19f59c7abe80fb986a..3c8eeb24ec6895aacb0e12c6ef4bbbfd28eb052b 100644 (file)
@@ -60,7 +60,8 @@ rspamd_request_header_dtor (gpointer p)
  * Create new task
  */
 struct rspamd_task *
-rspamd_task_new (struct rspamd_worker *worker, struct rspamd_config *cfg)
+rspamd_task_new (struct rspamd_worker *worker, struct rspamd_config *cfg,
+               rspamd_mempool_t *pool)
 {
        struct rspamd_task *new_task;
 
@@ -82,7 +83,14 @@ rspamd_task_new (struct rspamd_worker *worker, struct rspamd_config *cfg)
        new_task->time_real = rspamd_get_ticks ();
        new_task->time_virtual = rspamd_get_virtual_ticks ();
 
-       new_task->task_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), "task");
+       if (pool == NULL) {
+               new_task->task_pool =
+                               rspamd_mempool_new (rspamd_mempool_suggest_size (), "task");
+               new_task->flags |= RSPAMD_TASK_FLAG_OWN_POOL;
+       }
+       else {
+               new_task->task_pool = pool;
+       }
 
        new_task->raw_headers = g_hash_table_new_full (rspamd_strcase_hash,
                        rspamd_strcase_equal, NULL, rspamd_ptr_array_free_hard);
@@ -295,7 +303,10 @@ rspamd_task_free (struct rspamd_task *task)
                        REF_RELEASE (task->cfg);
                }
 
-               rspamd_mempool_delete (task->task_pool);
+               if (task->flags & RSPAMD_TASK_FLAG_OWN_POOL) {
+                       rspamd_mempool_delete (task->task_pool);
+               }
+
                g_slice_free1 (sizeof (struct rspamd_task), task);
        }
 }
index 549c49989162965b70875550f65654297ef4536c..cc1cc492af6271886035e691f293619660e8cfda 100644 (file)
@@ -106,6 +106,7 @@ enum rspamd_task_stage {
 #define RSPAMD_TASK_FLAG_COMPRESSED (1 << 24)
 #define RSPAMD_TASK_FLAG_PROFILE (1 << 25)
 #define RSPAMD_TASK_FLAG_GREYLISTED (1 << 26)
+#define RSPAMD_TASK_FLAG_OWN_POOL (1 << 27)
 
 #define RSPAMD_TASK_IS_SKIPPED(task) (((task)->flags & RSPAMD_TASK_FLAG_SKIP))
 #define RSPAMD_TASK_IS_JSON(task) (((task)->flags & RSPAMD_TASK_FLAG_JSON))
@@ -205,8 +206,9 @@ struct rspamd_task {
 /**
  * Construct new task for worker
  */
-struct rspamd_task * rspamd_task_new (struct rspamd_worker *worker,
-               struct rspamd_config *cfg);
+struct rspamd_task *rspamd_task_new (struct rspamd_worker *worker,
+               struct rspamd_config *cfg,
+               rspamd_mempool_t *pool);
 /**
  * Destroy task object and remove its IO dispatcher if it exists
  */
index fc051814b86f6036c21637d328f959147365bc0d..aef1b79762c623ea5e690170cc20e1fea8d1b0bf 100644 (file)
@@ -649,7 +649,7 @@ lua_util_process_message (lua_State *L)
        if (cfg != NULL && message != NULL) {
                base = event_init ();
                rspamd_init_filters (cfg, FALSE, NULL);
-               task = rspamd_task_new (NULL, cfg);
+               task = rspamd_task_new (NULL, cfg, NULL);
                task->ev_base = base;
                task->msg.begin = rspamd_mempool_alloc (task->task_pool, mlen);
                rspamd_strlcpy ((gpointer)task->msg.begin, message, mlen);
index f5471eee4a8a590f0c7b87f475fb6233500feef7..b15efdfe9b23ebf8718db2005680fad0b29c4d40 100644 (file)
@@ -2675,7 +2675,7 @@ fuzzy_process_handler (struct rspamd_http_connection_entry *conn_ent,
        gint r, *saved, rules = 0, err_idx;
 
        /* Prepare task */
-       task = rspamd_task_new (session->wrk, session->cfg);
+       task = rspamd_task_new (session->wrk, session->cfg, NULL);
        task->cfg = ctx->cfg;
        task->ev_base = conn_ent->rt->ev_base;
        saved = rspamd_mempool_alloc0 (session->pool, sizeof (gint));
index d7d7721a8126c490c914711766c11cf2d973dbfb..7cf014fbe154ed953a5a3abbb034c7ecf4a127d8 100644 (file)
@@ -358,7 +358,7 @@ rspamadm_lua_message_handler (lua_State *L, gint argc, gchar **argv)
                        rspamd_printf ("cannot open %s: %s\n", argv[i], strerror (errno));
                }
                else {
-                       task = rspamd_task_new (NULL, NULL);
+                       task = rspamd_task_new (NULL, NULL, NULL);
 
                        if (!rspamd_task_load_message (task, NULL, map, len)) {
                                rspamd_printf ("cannot load %s\n", argv[i]);
index 1b30827e726d63c2560d7466be2b7d85a5004b0b..c86f73f883087cb9de743db9b75c360f0bcb06e1 100644 (file)
@@ -1596,7 +1596,7 @@ rspamd_proxy_self_scan (struct rspamd_proxy_session *session)
        gsize len;
 
        msg = session->client_message;
-       task = rspamd_task_new (session->worker, session->ctx->cfg);
+       task = rspamd_task_new (session->worker, session->ctx->cfg, NULL);
        task->flags |= RSPAMD_TASK_FLAG_MIME;
        task->sock = -1;
 
index 5bb4b2d61553256329de2c84e37f1c5d9dd79253..80bf13d80b5f284838b0cc93aa9161de40f74e4a 100644 (file)
@@ -102,7 +102,7 @@ rspamd_worker_call_finish_handlers (struct rspamd_worker *worker)
        if (cfg->finish_callbacks) {
                ctx = worker->ctx;
                /* Create a fake task object for async events */
-               task = rspamd_task_new (worker, cfg);
+               task = rspamd_task_new (worker, cfg, NULL);
                task->resolver = ctx->resolver;
                task->ev_base = ctx->ev_base;
                task->flags |= RSPAMD_TASK_FLAG_PROCESSING;
@@ -369,7 +369,7 @@ accept_socket (gint fd, short what, void *arg)
                return;
        }
 
-       task = rspamd_task_new (worker, ctx->cfg);
+       task = rspamd_task_new (worker, ctx->cfg, NULL);
 
        msg_info_task ("accepted connection from %s port %d, task ptr: %p",
                rspamd_inet_address_to_string (addr),