Fixed bug#45445 - cannot execute procedures with thread_stack
set to 128k.
This commit is contained in:
parent
5f911fa874
commit
eec581e07f
@ -29,7 +29,6 @@ rpl.rpl_heartbeat_2slaves # BUG#43828 2009-10-22 luis fails spora
|
||||
rpl.rpl_innodb_bug28430* # Bug#46029
|
||||
rpl.rpl_innodb_bug30888* @solaris # Bug#47646 2009-09-25 alik rpl.rpl_innodb_bug30888 fails sporadically on Solaris
|
||||
rpl.rpl_killed_ddl @windows # Bug#47638 2010-01-20 alik The rpl_killed_ddl test fails on Windows
|
||||
rpl.rpl_row_sp011* @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||
|
||||
sys_vars.max_sp_recursion_depth_func @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||
sys_vars.slow_query_log_func @solaris # Bug#54819 2010-06-26 alik sys_vars.slow_query_log_func fails sporadically on Solaris 10
|
||||
|
@ -1213,8 +1213,27 @@ sp_head::execute(THD *thd)
|
||||
Object_creation_ctx *saved_creation_ctx;
|
||||
Warning_info *saved_warning_info, warning_info(thd->warning_info->warn_id());
|
||||
|
||||
/* Use some extra margin for possible SP recursion and functions */
|
||||
if (check_stack_overrun(thd, 8 * STACK_MIN_SIZE, (uchar*)&old_packet))
|
||||
/*
|
||||
Just reporting a stack overrun error
|
||||
(@sa check_stack_overrun()) requires stack memory for error
|
||||
message buffer. Thus, we have to put the below check
|
||||
relatively close to the beginning of the execution stack,
|
||||
where available stack margin is still big. As long as the check
|
||||
has to be fairly high up the call stack, the amount of memory
|
||||
we "book" for has to stay fairly high as well, and hence
|
||||
not very accurate. The number below has been calculated
|
||||
by trial and error, and reflects the amount of memory necessary
|
||||
to execute a single stored procedure instruction, be it either
|
||||
an SQL statement, or, heaviest of all, a CALL, which involves
|
||||
parsing and loading of another stored procedure into the cache
|
||||
(@sa db_load_routine() and Bug#10100).
|
||||
At the time of measuring, a recursive SP invocation required
|
||||
3232 bytes of stack on 32 bit Linux and 6016 bytes on 64 bit Mac.
|
||||
The same with db_load_routine() required circa 7k bytes and
|
||||
14k bytes accordingly. Hence, here we book the stack with some
|
||||
reasonable margin.
|
||||
*/
|
||||
if (check_stack_overrun(thd, 2 * STACK_MIN_SIZE, (uchar*)&old_packet))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
/* init per-instruction memroot */
|
||||
|
Loading…
x
Reference in New Issue
Block a user