summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Olav Hauglid <jon.hauglid@sun.com>2010-01-20 09:17:31 +0100
committerJon Olav Hauglid <jon.hauglid@sun.com>2010-01-20 09:17:31 +0100
commit661fd506a3bf3d195db6dc0b718821ea1ca41e3a (patch)
tree54342e8a969124f39c62ab440920776045cb897c
parent2a340691ff3839a37094f139a5c419b7d4007cb8 (diff)
downloadmariadb-git-661fd506a3bf3d195db6dc0b718821ea1ca41e3a.tar.gz
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.
-rw-r--r--sql/sql_base.cc3
1 files changed, 2 insertions, 1 deletions
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;