From 4a1ad3df6930733435817d642ee5708293d24a18 Mon Sep 17 00:00:00 2001 From: Martin Brampton Date: Sat, 5 Sep 2015 08:53:19 +0100 Subject: [PATCH] Attempt solution to crash caused by leaving link to backend DCB in router session. --- server/modules/protocol/mysql_backend.c | 1 - server/modules/routing/readconnroute.c | 10 ++++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/server/modules/protocol/mysql_backend.c b/server/modules/protocol/mysql_backend.c index 6a024c348..b737d0f58 100644 --- a/server/modules/protocol/mysql_backend.c +++ b/server/modules/protocol/mysql_backend.c @@ -1145,7 +1145,6 @@ gw_backend_hangup(DCB *dcb) spinlock_release(&session->ses_lock); } ss_dassert(dcb->dcb_errhandle_called); - dcb_close(dcb); retblock: return 1; diff --git a/server/modules/routing/readconnroute.c b/server/modules/routing/readconnroute.c index ccb071e1a..a8dfb1f72 100644 --- a/server/modules/routing/readconnroute.c +++ b/server/modules/routing/readconnroute.c @@ -74,6 +74,7 @@ #include #include #include +#include #include #include #include @@ -855,6 +856,7 @@ static void handleError( DCB *client_dcb; SESSION *session = backend_dcb->session; session_state_t sesstate; + ROUTER_CLIENT_SES *router_cli_ses = (ROUTER_CLIENT_SES *)router_session; /** Reset error handle flag from a given DCB */ if (action == ERRACT_RESET) @@ -888,6 +890,14 @@ static void handleError( { spinlock_release(&session->ses_lock); } + + if (backend_dcb != router_cli_ses->backend_dcb) + { + /* Linkages have gone badly wrong - this may not be best solution */ + raise(SIGABRT); + } + router_cli_ses->backend_dcb = NULL; + dcb_close(backend_dcb); /** false because connection is not available anymore */ *succp = false;