Loading sql/sp_head.cc +8 −8 Original line number Diff line number Diff line Loading @@ -735,11 +735,10 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount, Item **resp) init_alloc_root(&call_mem_root, MEM_ROOT_BLOCK_SIZE, 0); thd->set_n_backup_item_arena(&call_arena, &backup_arena); // QQ Should have some error checking here? (types, etc...) nctx= new sp_rcontext(csize, hmax, cmax); nctx->callers_mem_root= backup_arena.mem_root; nctx->callers_mem_root= thd->mem_root; for (i= 0 ; i < argcount ; i++) { sp_pvar_t *pvar = m_pcont->find_pvar(i); Loading @@ -765,6 +764,9 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount, Item **resp) } } thd->spcont= nctx; thd->set_n_backup_item_arena(&call_arena, &backup_arena); /* mem_root was moved to backup_arena */ DBUG_ASSERT(nctx->callers_mem_root == backup_arena.mem_root); ret= execute(thd); Loading Loading @@ -834,7 +836,6 @@ sp_head::execute_procedure(THD *thd, List<Item> *args) } init_alloc_root(&call_mem_root, MEM_ROOT_BLOCK_SIZE, 0); thd->set_n_backup_item_arena(&call_arena, &backup_arena); if (csize > 0 || hmax > 0 || cmax > 0) { Loading Loading @@ -899,12 +900,11 @@ sp_head::execute_procedure(THD *thd, List<Item> *args) } if (! ret) { thd->set_n_backup_item_arena(&call_arena, &backup_arena); ret= execute(thd); // Partially restore context now. // We still need the call mem root and free list for processing // of out parameters. thd->restore_backup_item_arena(&call_arena, &backup_arena); } if (!ret && csize > 0) { Loading sql/sql_union.cc +1 −0 Original line number Diff line number Diff line Loading @@ -646,6 +646,7 @@ bool st_select_lex::cleanup() if (join) { DBUG_ASSERT((st_select_lex*)join->select_lex == this); error|= join->destroy(); delete join; join= 0; Loading Loading
sql/sp_head.cc +8 −8 Original line number Diff line number Diff line Loading @@ -735,11 +735,10 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount, Item **resp) init_alloc_root(&call_mem_root, MEM_ROOT_BLOCK_SIZE, 0); thd->set_n_backup_item_arena(&call_arena, &backup_arena); // QQ Should have some error checking here? (types, etc...) nctx= new sp_rcontext(csize, hmax, cmax); nctx->callers_mem_root= backup_arena.mem_root; nctx->callers_mem_root= thd->mem_root; for (i= 0 ; i < argcount ; i++) { sp_pvar_t *pvar = m_pcont->find_pvar(i); Loading @@ -765,6 +764,9 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount, Item **resp) } } thd->spcont= nctx; thd->set_n_backup_item_arena(&call_arena, &backup_arena); /* mem_root was moved to backup_arena */ DBUG_ASSERT(nctx->callers_mem_root == backup_arena.mem_root); ret= execute(thd); Loading Loading @@ -834,7 +836,6 @@ sp_head::execute_procedure(THD *thd, List<Item> *args) } init_alloc_root(&call_mem_root, MEM_ROOT_BLOCK_SIZE, 0); thd->set_n_backup_item_arena(&call_arena, &backup_arena); if (csize > 0 || hmax > 0 || cmax > 0) { Loading Loading @@ -899,12 +900,11 @@ sp_head::execute_procedure(THD *thd, List<Item> *args) } if (! ret) { thd->set_n_backup_item_arena(&call_arena, &backup_arena); ret= execute(thd); // Partially restore context now. // We still need the call mem root and free list for processing // of out parameters. thd->restore_backup_item_arena(&call_arena, &backup_arena); } if (!ret && csize > 0) { Loading
sql/sql_union.cc +1 −0 Original line number Diff line number Diff line Loading @@ -646,6 +646,7 @@ bool st_select_lex::cleanup() if (join) { DBUG_ASSERT((st_select_lex*)join->select_lex == this); error|= join->destroy(); delete join; join= 0; Loading