From c937568624298fb31ce99f29a5d0676c612f909f Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Thu, 5 Mar 2015 20:46:55 +0200 Subject: [PATCH] Fixed a possible memory leak when session command history limits are used. --- server/modules/include/readwritesplit.h | 1 + server/modules/routing/readwritesplit/readwritesplit.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/server/modules/include/readwritesplit.h b/server/modules/include/readwritesplit.h index c79373533..7bb689bdb 100644 --- a/server/modules/include/readwritesplit.h +++ b/server/modules/include/readwritesplit.h @@ -290,6 +290,7 @@ struct router_client_session { int rses_capabilities; /*< input type, for example */ bool rses_autocommit_enabled; bool rses_transaction_active; + DCB* client_dcb; #if defined(PREP_STMT_CACHING) HASHTABLE* rses_prep_stmt[2]; #endif diff --git a/server/modules/routing/readwritesplit/readwritesplit.c b/server/modules/routing/readwritesplit/readwritesplit.c index d3c959c5b..c31b6a795 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.c +++ b/server/modules/routing/readwritesplit/readwritesplit.c @@ -790,6 +790,7 @@ static void* newSession( #endif client_rses->router = router; + client_rses->client_dcb = session->client; /** * If service config has been changed, reload config from service to * router instance first. @@ -4355,8 +4356,10 @@ static bool route_session_write( LOGFILE_TRACE, "Router session exceeded session command history limit. " "Closing router session. <"))); - router_cli_ses->rses_closed = true; + gwbuf_free(querybuf); rses_end_locked_router_action(router_cli_ses); + router_cli_ses->client_dcb->func.hangup(router_cli_ses->client_dcb); + goto return_succp; }