Loading sql/opt_range.cc +1 −1 Original line number Diff line number Diff line Loading @@ -3702,7 +3702,7 @@ get_mm_leaf(PARAM *param, COND *conf_func, Field *field, KEY_PART *key_part, /* We need to restore the runtime mem_root of the thread in this function becuase it evaluates the value of its argument, while function because it evaluates the value of its argument, while the argument can be any, e.g. a subselect. The subselect items, in turn, assume that all the memory allocated during the evaluation has the same life span as the item itself. Loading sql/sp_head.cc +0 −7 Original line number Diff line number Diff line Loading @@ -1474,13 +1474,6 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp, they want to store some value in local variable, pass return value and etc... So their life time should be longer than one instruction. Probably we can call destructors for most of them then we are leaving routine. But this won't help much as they are allocated in main query MEM_ROOT anyway. So they all go to global thd->free_list. May be we can use some other MEM_ROOT for this purprose ??? What else should we do for cleanup ? cleanup_items() is called in sp_head::execute() */ return res; Loading Loading
sql/opt_range.cc +1 −1 Original line number Diff line number Diff line Loading @@ -3702,7 +3702,7 @@ get_mm_leaf(PARAM *param, COND *conf_func, Field *field, KEY_PART *key_part, /* We need to restore the runtime mem_root of the thread in this function becuase it evaluates the value of its argument, while function because it evaluates the value of its argument, while the argument can be any, e.g. a subselect. The subselect items, in turn, assume that all the memory allocated during the evaluation has the same life span as the item itself. Loading
sql/sp_head.cc +0 −7 Original line number Diff line number Diff line Loading @@ -1474,13 +1474,6 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp, they want to store some value in local variable, pass return value and etc... So their life time should be longer than one instruction. Probably we can call destructors for most of them then we are leaving routine. But this won't help much as they are allocated in main query MEM_ROOT anyway. So they all go to global thd->free_list. May be we can use some other MEM_ROOT for this purprose ??? What else should we do for cleanup ? cleanup_items() is called in sp_head::execute() */ return res; Loading