diff options
author | unknown <sanja@montyprogram.com> | 2014-01-23 11:11:01 +0200 |
---|---|---|
committer | unknown <sanja@montyprogram.com> | 2014-01-23 11:11:01 +0200 |
commit | 5f5f7befe37e942d4fff0771ac79d143ca4500c6 (patch) | |
tree | 9375a0db3797cc35d126399afb83770b93baae2f /sql/sql_select.cc | |
parent | c0065d153938eea2a7c2729e7e65d624affc040e (diff) | |
download | mariadb-git-5f5f7befe37e942d4fff0771ac79d143ca4500c6.tar.gz |
MDEV-5356: Server crashes in Item_equal::contains on 2nd execution of a PS
THD::thd->activate_stmt_arena_if_needed() should be used to temporary activating statement arena instead of direct usage of THD::set_n_backup_active_arena() because possible such scenario:
1) func1 saves current arena and activates copy1 of statement arena
2) func2 saves copy1 of statement arena setup by func1 and activates copy2
3) some changes made for copy 2
4) func2 stores changed copy2 back to statenet arena and activates copy1
5) func1 store unchanged copy1 back to statemnt arena (rewrite changed copy 2 so changes become lost) and activates arena which was before.
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r-- | sql/sql_select.cc | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc index d8bbabd5f63..6434c045da0 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -882,11 +882,8 @@ JOIN::optimize() MEMROOT for prepared statements and stored procedures. */ - Query_arena *arena= thd->stmt_arena, backup; - if (arena->is_conventional()) - arena= 0; // For easier test - else - thd->set_n_backup_active_arena(arena, &backup); + Query_arena *arena, backup; + arena= thd->activate_stmt_arena_if_needed(&backup); sel->first_cond_optimization= 0; |