Fix to tee child session being in a bad state and the filter session still being active.
This commit is contained in:
parent
eb9d191437
commit
c93a7bede5
@ -778,11 +778,14 @@ int length, rval, residual = 0;
|
||||
GWBUF *clone = NULL;
|
||||
unsigned char command = *((unsigned char*)queue->start + 4);
|
||||
|
||||
spinlock_acquire(&my_session->tee_lock);
|
||||
|
||||
if(!my_session->active)
|
||||
{
|
||||
skygw_log_write(LOGFILE_TRACE, "Tee: Received a reply when the session was closed.");
|
||||
gwbuf_free(queue);
|
||||
return 0;
|
||||
rval = 0;
|
||||
goto retblock;
|
||||
}
|
||||
|
||||
if (my_session->branch_session &&
|
||||
@ -821,10 +824,11 @@ if(!my_session->active)
|
||||
clone = gwbuf_clone_all(queue);
|
||||
}
|
||||
}
|
||||
|
||||
spinlock_release(&my_session->tee_lock);
|
||||
|
||||
/* Pass the query downstream */
|
||||
|
||||
ss_dassert(my_session->tee_replybuf == NULL);
|
||||
|
||||
|
||||
switch(command)
|
||||
{
|
||||
case 0x03:
|
||||
@ -858,6 +862,15 @@ if(!my_session->active)
|
||||
}
|
||||
spinlock_release(&debug_lock);
|
||||
#endif
|
||||
spinlock_acquire(&my_session->tee_lock);
|
||||
|
||||
if(my_session->branch_session == NULL ||
|
||||
my_session->branch_session->state != SESSION_STATE_ROUTER_READY)
|
||||
{
|
||||
rval = 0;
|
||||
my_session->active = 0;
|
||||
goto retblock;
|
||||
}
|
||||
rval = my_session->down.routeQuery(my_session->down.instance,
|
||||
my_session->down.session,
|
||||
queue);
|
||||
@ -873,9 +886,10 @@ if(!my_session->active)
|
||||
{
|
||||
/** Close tee session */
|
||||
my_session->active = 0;
|
||||
rval = 0;
|
||||
LOGIF(LT, (skygw_log_write(
|
||||
LOGFILE_TRACE,
|
||||
"Closed tee filter session.")));
|
||||
"Closed tee filter session: Child session in invalid state.")));
|
||||
gwbuf_free(clone);
|
||||
}
|
||||
}
|
||||
@ -885,12 +899,14 @@ if(!my_session->active)
|
||||
{
|
||||
LOGIF(LT, (skygw_log_write(
|
||||
LOGFILE_TRACE,
|
||||
"Closed tee filter session.")));
|
||||
"Closed tee filter session: Child session is NULL.")));
|
||||
my_session->active = 0;
|
||||
rval = 0;
|
||||
}
|
||||
my_session->n_rejected++;
|
||||
}
|
||||
|
||||
retblock:
|
||||
spinlock_release(&my_session->tee_lock);
|
||||
return rval;
|
||||
}
|
||||
|
||||
@ -920,6 +936,14 @@ clientReply (FILTER* instance, void *session, GWBUF *reply)
|
||||
{
|
||||
gwbuf_free(reply);
|
||||
rc = 0;
|
||||
if(my_session->waiting[PARENT])
|
||||
{
|
||||
GWBUF* errbuf = modutil_create_mysql_err_msg(1,0,1,"0000","Session closed.");
|
||||
my_session->waiting[PARENT] = false;
|
||||
my_session->up.clientReply (my_session->up.instance,
|
||||
my_session->up.session,
|
||||
errbuf);
|
||||
}
|
||||
goto retblock;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user