Commit e31f20e5 authored by Jon Olav Hauglid's avatar Jon Olav Hauglid

Bug #50412 Assertion `! is_set()' failed in

           Diagnostics_area::set_ok_status at PREPARE

The problem occured during processing of stored routines. 
Routines are loaded from mysql.proc, parsed and put into the sp cache by
sp_cache_routine().  The assert occured because the return value from
sp_cache_routine() was not checked for top level CALLs. This meant that any
errors during sp_cache_routine() went unoticed and triggered the assert when
my_ok() was later called.

This is a regression introduced by the patch for Bug#30977, only visible in
source trees with MDL and using debug builds of the server.

This patch fixes the problem by checking the return value from sp_cache_routine() 
for top level CALLs and propagating any errors similar to what is done for other 
calls to sp_cache_routine().

No test case added.
parent beb52784
...@@ -3955,7 +3955,8 @@ open_and_process_routine(THD *thd, Query_tables_list *prelocking_ctx, ...@@ -3955,7 +3955,8 @@ open_and_process_routine(THD *thd, Query_tables_list *prelocking_ctx,
Validating routine version is unnecessary, since CALL Validating routine version is unnecessary, since CALL
does not affect the prepared statement prelocked list. does not affect the prepared statement prelocked list.
*/ */
sp_cache_routine(thd, rt, FALSE, &sp); if (sp_cache_routine(thd, rt, FALSE, &sp))
DBUG_RETURN(TRUE);
} }
} }
break; break;
......
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