Commit 9f0a79cb authored by unknown's avatar unknown

Fix for valgrind warning/crashes: When executing SP statement, If we set

thd->user_var_events_alloc (and so get binlog events to be allocated on its pool), 
clean the binlog events after the execution of this SP statement is finished.

parent d44ed347
...@@ -942,11 +942,12 @@ int sp_head::execute(THD *thd) ...@@ -942,11 +942,12 @@ int sp_head::execute(THD *thd)
*/ */
thd->stmt_arena= i; thd->stmt_arena= i;
/* will binlog this separately */ /*
if (thd->prelocked_mode == NON_PRELOCKED) //TODO: change to event union? Will write this SP statement into binlog separately
{ (TODO: consider changing the condition to "not inside event union")
*/
if (thd->prelocked_mode == NON_PRELOCKED)
thd->user_var_events_alloc= thd->mem_root; thd->user_var_events_alloc= thd->mem_root;
}
ret= i->execute(thd, &ip); ret= i->execute(thd, &ip);
...@@ -959,10 +960,20 @@ int sp_head::execute(THD *thd) ...@@ -959,10 +960,20 @@ int sp_head::execute(THD *thd)
if (i->free_list) if (i->free_list)
cleanup_items(i->free_list); cleanup_items(i->free_list);
i->state= Query_arena::EXECUTED; i->state= Query_arena::EXECUTED;
/*
If we've set thd->user_var_events_alloc to mem_root of this SP
statement, clean all the events allocated in it.
*/
if (thd->prelocked_mode == NON_PRELOCKED)
{
reset_dynamic(&thd->user_var_events);
thd->user_var_events_alloc= NULL;//DEBUG
}
/* we should cleanup free_list and memroot, used by instruction */ /* we should cleanup free_list and memroot, used by instruction */
thd->free_items(); thd->free_items();
free_root(&execute_mem_root, MYF(0)); free_root(&execute_mem_root, MYF(0));
/* /*
Check if an exception has occurred and a handler has been found Check if an exception has occurred and a handler has been found
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment