Clean up. Removed dead code and added comments.

This commit is contained in:
VilhoRaatikka
2014-12-30 10:05:13 +02:00
parent 2b30dcad6b
commit 2c2d6f8b66
2 changed files with 14 additions and 17 deletions

View File

@ -388,25 +388,19 @@ DCB_CALLBACK *cb;
*/ */
{ {
SESSION *local_session = dcb->session; SESSION *local_session = dcb->session;
dcb->session = NULL;
CHK_SESSION(local_session); CHK_SESSION(local_session);
/*<
* Remove reference from session if dcb is client.
*/
if (local_session->client == dcb) {
local_session->client = NULL;
}
/** /**
* Set session's client pointer NULL so that other threads * Set session's client pointer NULL so that other threads
* won't try to call dcb_close for client DCB * won't try to call dcb_close for client DCB
* after this call. * after this call.
*/ */
if (dcb->session->client == dcb) if (local_session->client == dcb)
{ {
spinlock_acquire(&dcb->session->ses_lock); spinlock_acquire(&local_session->ses_lock);
dcb->session->client = NULL; local_session->client = NULL;
spinlock_release(&dcb->session->ses_lock); spinlock_release(&local_session->ses_lock);
} }
dcb->session = NULL;
session_free(local_session); session_free(local_session);
} }
} }

View File

@ -1153,7 +1153,12 @@ gw_backend_close(DCB *dcb)
mysql_send_com_quit(dcb, 0, quitbuf); mysql_send_com_quit(dcb, 0, quitbuf);
mysql_protocol_done(dcb); mysql_protocol_done(dcb);
/**
* The lock is needed only to protect the read of session->state and
* session->client values. Client's state may change by other thread
* but client's close and adding client's DCB to zombies list is executed
* only if client's DCB's state does _not_ change in parallel.
*/
spinlock_acquire(&session->ses_lock); spinlock_acquire(&session->ses_lock);
/** /**
* If session->state is STOPPING, start closing client session. * If session->state is STOPPING, start closing client session.
@ -1163,14 +1168,12 @@ gw_backend_close(DCB *dcb)
session->state == SESSION_STATE_STOPPING && session->state == SESSION_STATE_STOPPING &&
session->client != NULL) session->client != NULL)
{ {
client_dcb = session->client; if (session->client->state == DCB_STATE_POLLING)
if (client_dcb->state == DCB_STATE_POLLING)
{ {
spinlock_release(&session->ses_lock); spinlock_release(&session->ses_lock);
/** Close client DCB */ /** Close client DCB */
dcb_close(client_dcb); dcb_close(session->client);
} }
else else
{ {