From 5357f6e2f215bcc856da2ce52b1bd4d296d914f3 Mon Sep 17 00:00:00 2001 From: VilhoRaatikka Date: Fri, 4 Jul 2014 14:26:55 +0300 Subject: [PATCH] Fixes symtoms described in http://bugs.skysql.com/show_bug.cgi?id=454 Added DCB state check to backend error evend handler. If state isn't DCB_STATE_POLLING anymore, socket is closed with purpose or error occurred but it has already been handled. Client doesn't hang anymore at least with the documented method. --- server/modules/protocol/mysql_backend.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/server/modules/protocol/mysql_backend.c b/server/modules/protocol/mysql_backend.c index acb1f8488..6c101204e 100644 --- a/server/modules/protocol/mysql_backend.c +++ b/server/modules/protocol/mysql_backend.c @@ -778,8 +778,16 @@ static int gw_error_backend_event(DCB *dcb) LOGFILE_ERROR, "Backend error event handling."))); #endif - - + /** + * Avoid running redundant error handling procedure. + * dcb_close is already called for the DCB. Thus, either connection is + * closed by router and COM_QUIT sent or there was an error which + * have already been handled. + */ + if (dcb->session != DCB_STATE_POLLING) + { + return 1; + } errbuf = mysql_create_custom_error( 1, 0,