Bug #468, http://bugs.skysql.com/show_bug.cgi?id=468, Query classifier accessed freed thread context. If parsing fails thd doesn't need to be freed because it holds correct information about command type.

session.c:session_setup_filters : fixed memory leak
hintparser.c: added token_free for HINT_TOKENs and fixed a few memory leaks.
mysql_client_server_protocol.h: added mysql_protocol_done which frees memory blocks pointed to by protocol members. Those can't be freed in dcb.c because dcb.c doesn't know about protocol's members.
mysql_backend.c:gw_backend_close: fixed memory leak
mysql_client.c: gw_client_close: fixed memory leak
mysql_common.c: added implementation of mysql_protocol_done
	:protocol_archive_srv_command: tried to fix memory leak. Some memory is still leaking according to valgrind. Removed use of uninitialized local variable len.
readwritesplit.c:execute_sescmd_in_backend: fixed a memory leak - visible only in DEBUG=Y build.
This commit is contained in:
VilhoRaatikka
2014-08-05 09:31:10 +03:00
parent 6ef5cbc609
commit 6b3c7041e3
7 changed files with 52 additions and 19 deletions

View File

@ -96,6 +96,31 @@ return_p:
}
/**
* mysql_protocol_done
*
* free protocol allocations.
*
* @param dcb owner DCB
*
*/
void mysql_protocol_done (
DCB* dcb)
{
server_command_t* scmd = ((MySQLProtocol *)dcb->protocol)->protocol_cmd_history;
server_command_t* scmd2;
while (scmd != NULL)
{
scmd2 = scmd->scom_next;
free(scmd);
scmd = scmd2;
}
}
/**
* gw_mysql_close
*
@ -1601,7 +1626,7 @@ void protocol_archive_srv_command(
{
server_command_t* s1;
server_command_t** s2;
int len;
int len = 0;
spinlock_acquire(&p->protocol_lock);
@ -1617,9 +1642,7 @@ void protocol_archive_srv_command(
s2 = &p->protocol_cmd_history;
if (*s2 != NULL)
{
len = 0;
{
while ((*s2)->scom_next != NULL)
{
*s2 = (*s2)->scom_next;