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;