mirror of
https://github.com/MariaDB/server.git
synced 2026-05-06 07:05:33 +02:00
MDEV-5138 Numerous test failures in "mtr --ps --embedded".
If a prepared statement calls an stored procedure,
the thd->server_status out of the SP goes up
to the PS and then to the client. So that the
client gets the SERVER_STATUS_CURSOR_EXISTS status
if the SP uses a cursor. Which makes the embedded
server fail.
Fixed by saving/restoring the upper-level server_status
in sp_head::execute().
This commit is contained in:
parent
9d32b8b2aa
commit
708ba733da
1 changed files with 3 additions and 0 deletions
|
|
@ -1223,6 +1223,7 @@ sp_head::execute(THD *thd, bool merge_da_on_success)
|
|||
LEX *old_lex;
|
||||
Item_change_list old_change_list;
|
||||
String old_packet;
|
||||
uint old_server_status;
|
||||
Reprepare_observer *save_reprepare_observer= thd->m_reprepare_observer;
|
||||
Object_creation_ctx *saved_creation_ctx;
|
||||
Warning_info *saved_warning_info;
|
||||
|
|
@ -1357,6 +1358,7 @@ sp_head::execute(THD *thd, bool merge_da_on_success)
|
|||
It is probably safe to use same thd->convert_buff everywhere.
|
||||
*/
|
||||
old_packet.swap(thd->packet);
|
||||
old_server_status= thd->server_status;
|
||||
|
||||
/*
|
||||
Switch to per-instruction arena here. We can do it since we cleanup
|
||||
|
|
@ -1486,6 +1488,7 @@ sp_head::execute(THD *thd, bool merge_da_on_success)
|
|||
thd->spcont->pop_all_cursors(); // To avoid memory leaks after an error
|
||||
|
||||
/* Restore all saved */
|
||||
thd->server_status= old_server_status;
|
||||
old_packet.swap(thd->packet);
|
||||
DBUG_ASSERT(thd->change_list.is_empty());
|
||||
old_change_list.move_elements_to(&thd->change_list);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue