From: Vsevolod Stakhov Date: Sat, 11 Jun 2016 12:15:35 +0000 (+0100) Subject: [Fix] Use shared memory merely for local backends in the proxy X-Git-Tag: 1.3.0~372 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e48dc88595c2ddd7be31512ba6677ceff09d7632;p=rspamd.git [Fix] Use shared memory merely for local backends in the proxy --- diff --git a/src/rspamd_proxy.c b/src/rspamd_proxy.c index 6e0c1c254..65339b3d5 100644 --- a/src/rspamd_proxy.c +++ b/src/rspamd_proxy.c @@ -1035,10 +1035,19 @@ proxy_open_mirror_connections (struct rspamd_proxy_session *session) session->ctx->local_key); msg->peer_key = rspamd_pubkey_ref (m->key); - rspamd_http_connection_write_message_shared (bk_conn->backend_conn, - msg, NULL, NULL, bk_conn, - bk_conn->backend_sock, - &session->ctx->io_tv, session->ctx->ev_base); + if (m->local || + rspamd_inet_address_is_local (rspamd_upstream_addr (bk_conn->up))) { + rspamd_http_connection_write_message_shared (bk_conn->backend_conn, + msg, NULL, NULL, bk_conn, + bk_conn->backend_sock, + &session->ctx->io_tv, session->ctx->ev_base); + } + else { + rspamd_http_connection_write_message (bk_conn->backend_conn, + msg, NULL, NULL, bk_conn, + bk_conn->backend_sock, + &session->ctx->io_tv, session->ctx->ev_base); + } g_ptr_array_add (session->mirror_conns, bk_conn); REF_RETAIN (session); @@ -1218,11 +1227,22 @@ proxy_client_finish_handler (struct rspamd_http_connection *conn, session->ctx->local_key); msg->peer_key = rspamd_pubkey_ref (backend->key); - rspamd_http_connection_write_message_shared ( - session->master_conn->backend_conn, - msg, NULL, NULL, session->master_conn, - session->master_conn->backend_sock, - &session->ctx->io_tv, session->ctx->ev_base); + if (backend->local || + rspamd_inet_address_is_local ( + rspamd_upstream_addr (session->master_conn->up))) { + rspamd_http_connection_write_message_shared ( + session->master_conn->backend_conn, + msg, NULL, NULL, session->master_conn, + session->master_conn->backend_sock, + &session->ctx->io_tv, session->ctx->ev_base); + } + else { + rspamd_http_connection_write_message ( + session->master_conn->backend_conn, + msg, NULL, NULL, session->master_conn, + session->master_conn->backend_sock, + &session->ctx->io_tv, session->ctx->ev_base); + } } } else {