From: Vsevolod Stakhov Date: Thu, 8 Jun 2017 18:21:58 +0000 (+0100) Subject: [Fix] Use the same pool for related sessions X-Git-Tag: 1.6.0~36 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=5d2e4dc2c1d91741b9937d43756321692ac4a9c0;p=rspamd.git [Fix] Use the same pool for related sessions --- diff --git a/src/controller.c b/src/controller.c index 052525750..37364813d 100644 --- a/src/controller.c +++ b/src/controller.c @@ -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; diff --git a/src/libserver/milter.c b/src/libserver/milter.c index 36423335e..305b63da3 100644 --- a/src/libserver/milter.c +++ b/src/libserver/milter.c @@ -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)); diff --git a/src/libserver/milter.h b/src/libserver/milter.h index 9eb8c3b25..3e1c7fff7 100644 --- a/src/libserver/milter.h +++ b/src/libserver/milter.h @@ -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); diff --git a/src/rspamd_proxy.c b/src/rspamd_proxy.c index c86f73f88..79065d1c7 100644 --- a/src/rspamd_proxy.c +++ b/src/rspamd_proxy.c @@ -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);