Commit 4151c404 authored by unknown's avatar unknown

Fixed memory leak that occured after merge with 4.1

We should not replace Item_arena in Item_bool_func2::fix_length_and_dec() if this is
conventional statement, since in this case THD::current_arena is the same as active arena
and we will overwrite arena with its older version during restore_backup_item_arena()
call.
parent d209efc0
......@@ -213,14 +213,21 @@ void Item_bool_func2::fix_length_and_dec()
{
THD *thd= current_thd;
/*
In case we're in statement prepare, create conversion item
in its memory: it will be reused on each execute.
In case we're in prepared statement, create conversion
item in its memory: it will be reused on each execute.
(and don't juggle with mem_root's if it is ordinary statement).
We come here only during first fix_fields() because after creating
conversion item we will have arguments with compatible collations.
*/
Item_arena *arena= thd->current_arena, backup;
thd->set_n_backup_item_arena(arena, &backup);
if (arena->is_conventional())
arena= 0;
else
thd->set_n_backup_item_arena(arena, &backup);
conv= new Item_func_conv_charset(args[weak],
args[strong]->collation.collation);
thd->restore_backup_item_arena(arena, &backup);
if (arena)
thd->restore_backup_item_arena(arena, &backup);
conv->collation.set(args[weak]->collation.derivation);
conv->fix_fields(thd, 0, &conv);
}
......
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