Throw away poll events that occur for persistent pool DCBs with no related session; fix typos.

This commit is contained in:
Martin Brampton
2015-06-14 18:19:30 +01:00
parent dc21ef0165
commit 84d5af1e00
4 changed files with 20 additions and 6 deletions

View File

@ -656,6 +656,7 @@ char *user;
LOGIF(LD, (skygw_log_write( LOGIF(LD, (skygw_log_write(
LOGFILE_DEBUG, LOGFILE_DEBUG,
"%lu [dcb_connect] Reusing a persistent connection, dcb %p\n", pthread_self(), dcb))); "%lu [dcb_connect] Reusing a persistent connection, dcb %p\n", pthread_self(), dcb)));
dcb->persistentstart = 0;
return dcb; return dcb;
} }
} }
@ -1298,11 +1299,14 @@ dcb_close(DCB *dcb)
STRDCBSTATE(dcb->state)))); STRDCBSTATE(dcb->state))));
dcb_close_finish(dcb); dcb_close_finish(dcb);
atomic_add(&dcb->server->stats.n_current, -1); if (dcb->server) atomic_add(&dcb->server->stats.n_current, -1);
}
}
ss_dassert(dcb->state == DCB_STATE_NOPOLLING || ss_dassert(dcb->state == DCB_STATE_NOPOLLING ||
dcb->state == DCB_STATE_ZOMBIE); dcb->state == DCB_STATE_ZOMBIE);
}
ss_dassert(dcb->state == DCB_STATE_NOPOLLING ||
dcb->state == DCB_STATE_ZOMBIE ||
dcb->state == DCB_STATE_POLLING);
}
} }
} }

View File

@ -153,7 +153,7 @@ server_get_persistent(SERVER *server, char *user, const char *protocol)
spinlock_acquire(&server->persistlock); spinlock_acquire(&server->persistlock);
dcb = server->persistent; dcb = server->persistent;
while (dcb) { while (dcb) {
if (dcb->user && dcb->protoname && 0 == strcmp(dcb->user, user) && 0 == strcmp(dcb->protoname, protocol)) if (dcb->user && dcb->protoname && !dcb-> dcb_errhandle_called && 0 == strcmp(dcb->user, user) && 0 == strcmp(dcb->protoname, protocol))
{ {
if (NULL == previous) if (NULL == previous)
{ {

View File

@ -166,6 +166,11 @@ static int gw_read_backend_event(DCB *dcb) {
int rc = 0; int rc = 0;
CHK_DCB(dcb); CHK_DCB(dcb);
if (!dcb->session && dcb->persistentstart)
{
dcb->dcb_errhandle_called = true;
goto return_rc;
}
CHK_SESSION(dcb->session); CHK_SESSION(dcb->session);
/*< return only with complete session */ /*< return only with complete session */
@ -1043,6 +1048,11 @@ gw_backend_hangup(DCB *dcb)
session_state_t ses_state; session_state_t ses_state;
CHK_DCB(dcb); CHK_DCB(dcb);
if (!dcb->session && dcb->persistentstart)
{
dcb->dcb_errhandle_called = true;
goto retblock;
}
session = dcb->session; session = dcb->session;
CHK_SESSION(session); CHK_SESSION(session);

View File

@ -1319,7 +1319,7 @@ int gw_check_mysql_scramble_data(DCB *dcb, uint8_t *token, unsigned int token_le
if (ret_val) { if (ret_val) {
/* if password was sent, fill stage1_hash with at least 1 byte in order /* if password was sent, fill stage1_hash with at least 1 byte in order
* to create rigth error message: (using password: YES|NO) * to create right error message: (using password: YES|NO)
*/ */
if (token_len) if (token_len)
memcpy(stage1_hash, (char *)"_", 1); memcpy(stage1_hash, (char *)"_", 1);
@ -1362,7 +1362,7 @@ int gw_check_mysql_scramble_data(DCB *dcb, uint8_t *token, unsigned int token_le
/*< /*<
* step2: STEP2 = XOR(token, STEP1) * step2: STEP2 = XOR(token, STEP1)
* *
* token is trasmitted form client and it's based on the handshake scramble and SHA1(real_passowrd) * token is transmitted form client and it's based on the handshake scramble and SHA1(real_passowrd)
* step1 has been computed in the previous step * step1 has been computed in the previous step
* the result STEP2 is SHA1(the_password_to_check) and is SHA_DIGEST_LENGTH long * the result STEP2 is SHA1(the_password_to_check) and is SHA_DIGEST_LENGTH long
*/ */