Commit 9f0a79cb authored by unknown's avatar unknown
Browse files

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
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -942,11 +942,12 @@ int sp_head::execute(THD *thd)
    */
    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;
    }
    
    ret= i->execute(thd, &ip);

@@ -960,6 +961,16 @@ int sp_head::execute(THD *thd)
      cleanup_items(i->free_list);
    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 */
    thd->free_items();
    free_root(&execute_mem_root, MYF(0));