From d74990833bb67ff3ed9193f7ad4d18fd202d4e52 Mon Sep 17 00:00:00 2001 From: counterpoint Date: Tue, 1 Sep 2015 09:59:34 +0100 Subject: [PATCH] Move capture of user name for persistent connections; expand error message in mysql client to give more information. --- server/core/dcb.c | 18 ++++++++++++------ server/modules/protocol/mysql_client.c | 6 ++++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/server/core/dcb.c b/server/core/dcb.c index ab1e3638e..7112ef7a3 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -1845,6 +1845,16 @@ dcb_close(DCB *dcb) spinlock_acquire(&zombiespin); if (!dcb->dcb_is_zombie) { + if (dcb->server && DCB_STATE_POLLING == dcb->state) + { + /* May be a candidate for persistence, so save user name */ + char *user; + user = session_getUser(dcb->session); + if (user && strlen(user) && !dcb->user) + { + dcb->user = strdup(user); + } + } /*< * Add closing dcb to the top of the list, setting zombie marker */ @@ -1870,10 +1880,8 @@ static bool dcb_maybe_add_persistent(DCB *dcb) { int poolcount = -1; - char *user; - user = session_getUser(dcb->session); - if (user != NULL - && strlen(user) + if (dcb->user != NULL + && strlen(dcb->user) && dcb->server && dcb->server->persistpoolmax && !dcb->dcb_errhandle_called @@ -1887,8 +1895,6 @@ dcb_maybe_add_persistent(DCB *dcb) dcb->user))); dcb->dcb_is_zombie = false; dcb->persistentstart = time(NULL); - if (dcb->user) free(dcb->user); - dcb->user = strdup(user); spinlock_acquire(&dcb->server->persistlock); dcb->nextpersistent = dcb->server->persistent; dcb->server->persistent = dcb; diff --git a/server/modules/protocol/mysql_client.c b/server/modules/protocol/mysql_client.c index 077ec6918..ac5381df3 100644 --- a/server/modules/protocol/mysql_client.c +++ b/server/modules/protocol/mysql_client.c @@ -1859,8 +1859,10 @@ gw_client_hangup_event(DCB *dcb) } #if defined(SS_DEBUG) LOGIF(LE, (skygw_log_write_flush( - LOGFILE_ERROR, - "Client hangup error handling."))); + LOGFILE_ERROR, + "Client hangup error handling, session state %s, dcb state %s.", + session_state(session->state), + STRDCBSTATE(dcb->state)))); #endif dcb_close(dcb);