Skip to content

Commit 35b9c88

Browse files
committed
Memory leak fix, cs 7622 from trunk
1 parent 2a19757 commit 35b9c88

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

sql-common/client.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -678,8 +678,16 @@ void free_state_change_info(MYSQL_EXTENSION *ext)
678678
{
679679
/*
680680
Since nodes were multi-alloced, we don't need to free the data
681-
separately.
681+
separately. But the str member in data needs to be freed.
682682
*/
683+
LIST *tmp_list= info->info_list[i].head_node;
684+
while (tmp_list)
685+
{
686+
LEX_STRING *tmp= (LEX_STRING *)(tmp_list)->data;
687+
if (tmp->str)
688+
my_free(tmp->str);
689+
tmp_list= tmp_list->next;
690+
}
683691
list_free(info->info_list[i].head_node, (uint) 0);
684692
}
685693
}
@@ -4653,16 +4661,15 @@ void STDCALL mysql_close(MYSQL *mysql)
46534661
simple_command(mysql,COM_QUIT,(uchar*) 0,0,1);
46544662
end_server(mysql); /* Sets mysql->net.vio= 0 */
46554663
}
4664+
if (mysql->extension)
4665+
mysql_extension_free(mysql->extension);
46564666
mysql_close_free_options(mysql);
46574667
mysql_close_free(mysql);
46584668
mysql_detach_stmt_list(&mysql->stmts, "mysql_close");
46594669
#ifndef MYSQL_SERVER
46604670
if (mysql->thd)
46614671
(*mysql->methods->free_embedded_thd)(mysql);
46624672
#endif
4663-
if (mysql->extension)
4664-
mysql_extension_free(mysql->extension);
4665-
mysql->extension= NULL;
46664673
if (mysql->free_me)
46674674
my_free(mysql);
46684675
}

0 commit comments

Comments
 (0)