diff --git a/server/core/dcb.c b/server/core/dcb.c index 013029de6..ab1e3638e 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -1845,9 +1845,6 @@ dcb_close(DCB *dcb) spinlock_acquire(&zombiespin); if (!dcb->dcb_is_zombie) { - char *user; - user = session_getUser(dcb->session); - if (NULL != user) dcb->user = strdup(user); /*< * Add closing dcb to the top of the list, setting zombie marker */ @@ -1873,8 +1870,10 @@ static bool dcb_maybe_add_persistent(DCB *dcb) { int poolcount = -1; - if (dcb->user != NULL - && strlen(dcb->user) + char *user; + user = session_getUser(dcb->session); + if (user != NULL + && strlen(user) && dcb->server && dcb->server->persistpoolmax && !dcb->dcb_errhandle_called @@ -1888,6 +1887,8 @@ 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/core/session.c b/server/core/session.c index b50d5e0c8..1411d34bd 100644 --- a/server/core/session.c +++ b/server/core/session.c @@ -222,7 +222,7 @@ session_alloc(SERVICE *service, DCB *client_dcb) * @return The dummy created session */ SESSION * -session_alloc_dummy(DCB *client_dcb) +session_set_dummy(DCB *client_dcb) { SESSION *session; diff --git a/server/include/session.h b/server/include/session.h index e916c902e..edb4af1d4 100644 --- a/server/include/session.h +++ b/server/include/session.h @@ -163,7 +163,7 @@ typedef struct session { SESSION *get_all_sessions(); SESSION *session_alloc(struct service *, struct dcb *); -SESSION *session_alloc_dummy(struct dcb *); +SESSION *session_set_dummy(struct dcb *); bool session_free(SESSION *); int session_isvalid(SESSION *); int session_reply(void *inst, void *session, GWBUF *data); diff --git a/server/modules/protocol/mysql_client.c b/server/modules/protocol/mysql_client.c index a90feab39..077ec6918 100644 --- a/server/modules/protocol/mysql_client.c +++ b/server/modules/protocol/mysql_client.c @@ -1643,7 +1643,7 @@ int gw_MySQLAccept(DCB *listener) } client_dcb->service = listener->session->service; - client_dcb->session = session_alloc_dummy(client_dcb); + client_dcb->session = session_set_dummy(client_dcb); client_dcb->fd = c_sock; // get client address