Improve user name setting in DCB for persistent connections and to fix bug; change name of session_alloc_dummy to session_set_dummy to be more informative.

This commit is contained in:
counterpoint
2015-08-28 18:20:18 +01:00
parent f1c3b65b15
commit a711b25fec
4 changed files with 9 additions and 8 deletions

View File

@ -1845,9 +1845,6 @@ dcb_close(DCB *dcb)
spinlock_acquire(&zombiespin); spinlock_acquire(&zombiespin);
if (!dcb->dcb_is_zombie) 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 * Add closing dcb to the top of the list, setting zombie marker
*/ */
@ -1873,8 +1870,10 @@ static bool
dcb_maybe_add_persistent(DCB *dcb) dcb_maybe_add_persistent(DCB *dcb)
{ {
int poolcount = -1; int poolcount = -1;
if (dcb->user != NULL char *user;
&& strlen(dcb->user) user = session_getUser(dcb->session);
if (user != NULL
&& strlen(user)
&& dcb->server && dcb->server
&& dcb->server->persistpoolmax && dcb->server->persistpoolmax
&& !dcb->dcb_errhandle_called && !dcb->dcb_errhandle_called
@ -1888,6 +1887,8 @@ dcb_maybe_add_persistent(DCB *dcb)
dcb->user))); dcb->user)));
dcb->dcb_is_zombie = false; dcb->dcb_is_zombie = false;
dcb->persistentstart = time(NULL); dcb->persistentstart = time(NULL);
if (dcb->user) free(dcb->user);
dcb->user = strdup(user);
spinlock_acquire(&dcb->server->persistlock); spinlock_acquire(&dcb->server->persistlock);
dcb->nextpersistent = dcb->server->persistent; dcb->nextpersistent = dcb->server->persistent;
dcb->server->persistent = dcb; dcb->server->persistent = dcb;

View File

@ -222,7 +222,7 @@ session_alloc(SERVICE *service, DCB *client_dcb)
* @return The dummy created session * @return The dummy created session
*/ */
SESSION * SESSION *
session_alloc_dummy(DCB *client_dcb) session_set_dummy(DCB *client_dcb)
{ {
SESSION *session; SESSION *session;

View File

@ -163,7 +163,7 @@ typedef struct session {
SESSION *get_all_sessions(); SESSION *get_all_sessions();
SESSION *session_alloc(struct service *, struct dcb *); SESSION *session_alloc(struct service *, struct dcb *);
SESSION *session_alloc_dummy(struct dcb *); SESSION *session_set_dummy(struct dcb *);
bool session_free(SESSION *); bool session_free(SESSION *);
int session_isvalid(SESSION *); int session_isvalid(SESSION *);
int session_reply(void *inst, void *session, GWBUF *data); int session_reply(void *inst, void *session, GWBUF *data);

View File

@ -1643,7 +1643,7 @@ int gw_MySQLAccept(DCB *listener)
} }
client_dcb->service = listener->session->service; 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; client_dcb->fd = c_sock;
// get client address // get client address