MXS-1977: Fix protocol and readwritesplit memory leaks
The protocol could leak memory in rare cases where several commands were queued at the same time. Readwritesplit also didn't free the memory it acquired via qc_get_table_names.
This commit is contained in:
parent
9b1d1303ce
commit
4fb4ed416b
@ -637,8 +637,9 @@ void protocol_remove_srv_command(MySQLProtocol* p)
|
||||
}
|
||||
else
|
||||
{
|
||||
p->protocol_command = *(s->scom_next);
|
||||
server_command_t tmp = *(s->scom_next);
|
||||
MXS_FREE(s->scom_next);
|
||||
p->protocol_command = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -51,24 +51,32 @@ static bool foreach_table(RWSplitSession* rses, GWBUF* querybuf, bool (*func)(RW
|
||||
int n_tables;
|
||||
char** tables = qc_get_table_names(querybuf, &n_tables, true);
|
||||
|
||||
for (int i = 0; i < n_tables; i++)
|
||||
if (tables)
|
||||
{
|
||||
const char* db = mxs_mysql_get_current_db(rses->client_dcb->session);
|
||||
std::string table;
|
||||
|
||||
if (strchr(tables[i], '.') == NULL)
|
||||
for (int i = 0; i < n_tables; i++)
|
||||
{
|
||||
table += db;
|
||||
table += ".";
|
||||
if (rval)
|
||||
{
|
||||
const char* db = mxs_mysql_get_current_db(rses->client_dcb->session);
|
||||
std::string table;
|
||||
|
||||
if (strchr(tables[i], '.') == NULL)
|
||||
{
|
||||
table += db;
|
||||
table += ".";
|
||||
}
|
||||
|
||||
table += tables[i];
|
||||
|
||||
if (!func(rses, table))
|
||||
{
|
||||
rval = false;
|
||||
}
|
||||
}
|
||||
MXS_FREE(tables[i]);
|
||||
}
|
||||
|
||||
table += tables[i];
|
||||
|
||||
if (!func(rses, table))
|
||||
{
|
||||
rval = false;
|
||||
break;
|
||||
}
|
||||
MXS_FREE(tables);
|
||||
}
|
||||
|
||||
return rval;
|
||||
|
Loading…
x
Reference in New Issue
Block a user