From b3656eba077f1c31f9fc1c81bcba66baad67fab1 Mon Sep 17 00:00:00 2001 From: VilhoRaatikka Date: Wed, 30 Jul 2014 20:43:43 +0300 Subject: [PATCH] Added check for session state before calling route->closeSession --- server/modules/protocol/mysql_client.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/server/modules/protocol/mysql_client.c b/server/modules/protocol/mysql_client.c index 1db23b4fe..db61084eb 100644 --- a/server/modules/protocol/mysql_client.c +++ b/server/modules/protocol/mysql_client.c @@ -1331,12 +1331,25 @@ gw_client_close(DCB *dcb) * session may be NULL if session_alloc failed. * In that case, router session wasn't created. */ - if (session != NULL) { + if (session != NULL) + { CHK_SESSION(session); spinlock_acquire(&session->ses_lock); - session->state = SESSION_STATE_STOPPING; - spinlock_release(&session->ses_lock); + if (session->state == SESSION_STATE_STOPPING) + { + /** + * Session is already getting closed so avoid + * redundant calls + */ + spinlock_release(&session->ses_lock); + return 1; + } + else + { + session->state = SESSION_STATE_STOPPING; + spinlock_release(&session->ses_lock); + } router = session->service->router; router_instance = session->service->router_instance; rsession = session->router_session;