]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Use the same pool for related sessions
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 8 Jun 2017 18:21:58 +0000 (19:21 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 8 Jun 2017 18:21:58 +0000 (19:21 +0100)
src/controller.c
src/libserver/milter.c
src/libserver/milter.h
src/rspamd_proxy.c

index 052525750c42e251de7ef4cebb6ae303a938469e..37364813dbf1b6fab4af2c76ddf29625e22162f5 100644 (file)
@@ -1465,7 +1465,7 @@ rspamd_controller_handle_lua_history (lua_State *L,
 
                        if (lua_isfunction (L, -1)) {
                                task = rspamd_task_new (session->ctx->worker, session->cfg,
-                                               NULL);
+                                               session->pool);
 
                                task->resolver = ctx->resolver;
                                task->ev_base = ctx->ev_base;
@@ -1763,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, NULL);
+       task = rspamd_task_new (session->ctx->worker, session->cfg, session->pool);
 
        task->resolver = ctx->resolver;
        task->ev_base = ctx->ev_base;
@@ -1946,7 +1946,7 @@ rspamd_controller_handle_learn_common (
                return 0;
        }
 
-       task = rspamd_task_new (session->ctx->worker, session->cfg, NULL);
+       task = rspamd_task_new (session->ctx->worker, session->cfg, session->pool);
 
        task->resolver = ctx->resolver;
        task->ev_base = ctx->ev_base;
@@ -2046,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, NULL);
+       task = rspamd_task_new (session->ctx->worker, session->cfg, session->pool);
        task->ev_base = session->ctx->ev_base;
 
        task->resolver = ctx->resolver;
@@ -2544,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, NULL);
+       task = rspamd_task_new (session->ctx->worker, session->cfg, session->pool);
 
        ctx = session->ctx;
        task->resolver = ctx->resolver;
@@ -2878,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, NULL);
+       task = rspamd_task_new (session->ctx->worker, session->cfg, session->pool);
 
        task->resolver = ctx->resolver;
        task->ev_base = ctx->ev_base;
index 36423335ecbc5b96cdd23f64e05041345dbded50..305b63da3a1664b4131799ba027ef9ed45326923 100644 (file)
@@ -180,8 +180,6 @@ rspamd_milter_session_dtor (struct rspamd_milter_session *session)
                        rspamd_fstring_free (session->hostname);
                }
 
-               rspamd_mempool_delete (priv->pool);
-
                g_free (priv);
                g_free (session);
        }
@@ -959,6 +957,7 @@ rspamd_milter_handle_session (struct rspamd_milter_session *session,
 
 gboolean
 rspamd_milter_handle_socket (gint fd, const struct timeval *tv,
+               rspamd_mempool_t *pool,
                struct event_base *ev_base, rspamd_milter_finish finish_cb,
                rspamd_milter_error error_cb, void *ud)
 {
@@ -983,7 +982,7 @@ rspamd_milter_handle_socket (gint fd, const struct timeval *tv,
        priv->parser.buf = rspamd_fstring_sized_new (RSPAMD_MILTER_MESSAGE_CHUNK + 5);
        priv->ev_base = ev_base;
        priv->state = RSPAMD_MILTER_READ_MORE;
-       priv->pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), "milter");
+       priv->pool = pool;
 
        if (tv) {
                memcpy (&priv->tv, tv, sizeof (*tv));
index 9eb8c3b252707d3ddf8ff9dd7641d451708a41b3..3e1c7fff75f51807837071edaadf3342e2a5f6e5 100644 (file)
@@ -68,6 +68,7 @@ typedef void (*rspamd_milter_error) (gint fd,
  * @return
  */
 gboolean rspamd_milter_handle_socket (gint fd, const struct timeval *tv,
+               rspamd_mempool_t *pool,
                struct event_base *ev_base, rspamd_milter_finish finish_cb,
                rspamd_milter_error error_cb, void *ud);
 
index c86f73f883087cb9de743db9b75c360f0bcb06e1..79065d1c732d1f34d3aae80839bcc9d8210df96d 100644 (file)
@@ -1596,7 +1596,8 @@ rspamd_proxy_self_scan (struct rspamd_proxy_session *session)
        gsize len;
 
        msg = session->client_message;
-       task = rspamd_task_new (session->worker, session->ctx->cfg, NULL);
+       task = rspamd_task_new (session->worker, session->ctx->cfg,
+                       session->pool);
        task->flags |= RSPAMD_TASK_FLAG_MIME;
        task->sock = -1;
 
@@ -1941,7 +1942,8 @@ proxy_accept_socket (gint fd, short what, void *arg)
        session->client_addr = addr;
        session->mirror_conns = g_ptr_array_sized_new (ctx->mirrors->len);
 
-       session->pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), "proxy");
+       session->pool = rspamd_mempool_new (rspamd_mempool_suggest_size (),
+                       "proxy");
        session->ctx = ctx;
        session->worker = worker;
 
@@ -1973,7 +1975,9 @@ proxy_accept_socket (gint fd, short what, void *arg)
                                rspamd_inet_address_to_string (addr),
                                rspamd_inet_address_get_port (addr));
 
-               rspamd_milter_handle_socket (nfd, &ctx->io_tv, ctx->ev_base,
+               rspamd_milter_handle_socket (nfd, &ctx->io_tv,
+                               session->pool,
+                               ctx->ev_base,
                                proxy_milter_finish_handler,
                                proxy_milter_error_handler,
                                session);