From c005126107d1c48c39c1b34996e1015b0bdc7d21 Mon Sep 17 00:00:00 2001 From: Jon Olav Hauglid Date: Wed, 20 Jan 2010 09:17:31 +0100 Subject: [PATCH] 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. --- sql/sql_base.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/sql_base.cc b/sql/sql_base.cc index d02e4f38807..8d3ef372842 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -3955,7 +3955,8 @@ open_and_process_routine(THD *thd, Query_tables_list *prelocking_ctx, Validating routine version is unnecessary, since CALL 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;