mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Bug #52629: memory leak from sys_var_thd_dbug in binlog.binlog_write_error
When re-setting (SET GLOBAL debug='') the GLOBAL debug settings the server was not freeing the data elements from the top (initial) frame before setting them to 0 without freeing the underlying memory. As these are global settings there's a chance that something is there already. Fixed by : 1. making sure the allocated data are cleaned up before re-setting them while parsing a debug string 2. making sure the stuff allocated in the global settings is freed on shutdown.
This commit is contained in:
parent
8fa9a5861b
commit
16fadb10b5
3 changed files with 36 additions and 0 deletions
10
dbug/dbug.c
10
dbug/dbug.c
|
@ -455,6 +455,13 @@ static void DbugParse(CODE_STATE *cs, const char *control)
|
|||
rel= control[0] == '+' || control[0] == '-';
|
||||
if ((!rel || (!stack->out_file && !stack->next)))
|
||||
{
|
||||
/*
|
||||
We need to free what's already in init_settings, because unlike
|
||||
the thread related stack frames there's a chance that something
|
||||
is in these variables already.
|
||||
*/
|
||||
if (stack == &init_settings)
|
||||
FreeState(cs, stack, 0);
|
||||
stack->flags= 0;
|
||||
stack->delay= 0;
|
||||
stack->maxdepth= 0;
|
||||
|
@ -1510,7 +1517,10 @@ void _db_end_()
|
|||
while ((discard= cs->stack))
|
||||
{
|
||||
if (discard == &init_settings)
|
||||
{
|
||||
FreeState (cs, discard, 0);
|
||||
break;
|
||||
}
|
||||
cs->stack= discard->next;
|
||||
FreeState(cs, discard, 1);
|
||||
}
|
||||
|
|
|
@ -10,3 +10,16 @@ set debug= '-P';
|
|||
select @@debug;
|
||||
@@debug
|
||||
T
|
||||
#
|
||||
# Bug #52629: memory leak from sys_var_thd_dbug in
|
||||
# binlog.binlog_write_error
|
||||
#
|
||||
SET GLOBAL debug='d,injecting_fault_writing';
|
||||
SELECT @@global.debug;
|
||||
@@global.debug
|
||||
d,injecting_fault_writing
|
||||
SET GLOBAL debug='';
|
||||
SELECT @@global.debug;
|
||||
@@global.debug
|
||||
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -10,3 +10,16 @@ set debug= '+P';
|
|||
select @@debug;
|
||||
set debug= '-P';
|
||||
select @@debug;
|
||||
|
||||
--echo #
|
||||
--echo # Bug #52629: memory leak from sys_var_thd_dbug in
|
||||
--echo # binlog.binlog_write_error
|
||||
--echo #
|
||||
|
||||
SET GLOBAL debug='d,injecting_fault_writing';
|
||||
SELECT @@global.debug;
|
||||
SET GLOBAL debug='';
|
||||
SELECT @@global.debug;
|
||||
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
|
Loading…
Reference in a new issue