mysql_client.c:gw_client_close didn't close client session in cases where session->state == SESSION_STATE_STOPPING. That is a bug and lead to situation where session wasn't closed at all.
Also changed 'authorization failed' to 'access denied' mysql_common.c: fixed memory leak in gw_receive_backend_auth, and replaced error code '2800' with '28000'. readconnroute.c:handleError didn't set *succp pointer so uninitialized value was used in caller's context. makefile.inc: added -lm to linker flags mysql_backend.c: added a few comments
This commit is contained in:
@ -659,7 +659,7 @@ int gw_read_client_event(
|
||||
dcb,
|
||||
2,
|
||||
0,
|
||||
"Authorization failed");
|
||||
"Access denied");
|
||||
|
||||
dcb_close(dcb);
|
||||
}
|
||||
@ -801,9 +801,12 @@ int gw_read_client_event(
|
||||
}
|
||||
|
||||
/** succeed */
|
||||
if (rc) {
|
||||
if (rc)
|
||||
{
|
||||
rc = 0; /**< here '0' means success */
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
GWBUF* errbuf;
|
||||
bool succp;
|
||||
|
||||
@ -1360,20 +1363,12 @@ gw_client_close(DCB *dcb)
|
||||
CHK_SESSION(session);
|
||||
spinlock_acquire(&session->ses_lock);
|
||||
|
||||
if (session->state == SESSION_STATE_STOPPING)
|
||||
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);
|
||||
}
|
||||
session->state = SESSION_STATE_STOPPING;
|
||||
}
|
||||
spinlock_release(&session->ses_lock);
|
||||
|
||||
router = session->service->router;
|
||||
router_instance = session->service->router_instance;
|
||||
rsession = session->router_session;
|
||||
|
Reference in New Issue
Block a user