Fixed queued queries not being freed if session was closed before they could be routed.

This commit is contained in:
Markus Makela
2015-04-30 22:17:22 +03:00
parent e0feeac9e6
commit 2498278582

View File

@ -1173,6 +1173,10 @@ static void closeSession(
dcb_close(router_cli_ses->dcb_reply); dcb_close(router_cli_ses->dcb_reply);
dcb_close(router_cli_ses->dcb_route); dcb_close(router_cli_ses->dcb_route);
if(router_cli_ses->queue)
router_cli_ses->queue = gwbuf_consume(
router_cli_ses->queue,gwbuf_length(router_cli_ses->queue));
/** Unlock */ /** Unlock */
rses_end_locked_router_action(router_cli_ses); rses_end_locked_router_action(router_cli_ses);
@ -1828,7 +1832,7 @@ gen_show_dbs_response(ROUTER_INSTANCE* router, ROUTER_CLIENT_SES* client)
static int routeQuery( static int routeQuery(
ROUTER* instance, ROUTER* instance,
void* router_session, void* router_session,
GWBUF* querybuf) GWBUF* qbuf)
{ {
skygw_query_type_t qtype = QUERY_TYPE_UNKNOWN; skygw_query_type_t qtype = QUERY_TYPE_UNKNOWN;
mysql_server_cmd_t packet_type; mysql_server_cmd_t packet_type;
@ -1842,7 +1846,7 @@ static int routeQuery(
route_target_t route_target = TARGET_UNDEFINED; route_target_t route_target = TARGET_UNDEFINED;
bool succp = false; bool succp = false;
char* tname = NULL; char* tname = NULL;
GWBUF* querybuf = qbuf;
CHK_CLIENT_RSES(router_cli_ses); CHK_CLIENT_RSES(router_cli_ses);
@ -1879,7 +1883,7 @@ static int routeQuery(
router_cli_ses->rses_client_dcb->session, router_cli_ses->rses_client_dcb->session,
querystr); querystr);
free(querystr); free(querystr);
gwbuf_make_contiguous(querybuf); querybuf = gwbuf_make_contiguous(querybuf);
GWBUF* ptr = router_cli_ses->queue; GWBUF* ptr = router_cli_ses->queue;
while(ptr && ptr->next) while(ptr && ptr->next)