summaryrefslogtreecommitdiff
path: root/sql/sql_base.cc
diff options
context:
space:
mode:
authorRucha Deodhar <rucha.deodhar@mariadb.com>2020-10-16 20:19:09 +0530
committerRucha Deodhar <rucha.deodhar@mariadb.com>2021-09-07 09:50:11 +0530
commit31dbfb5e617b19ffea6ea6350207e48cdcd371d7 (patch)
treee82eaa278ba9cef602351daa9ee13893e113b788 /sql/sql_base.cc
parent84c578c7952161fe5068fea003f0f8b1d62caa89 (diff)
downloadmariadb-git-bb-10.5-MDEV-23836.tar.gz
MDEV-23836: Assertion `! is_set() || m_can_overwrite_status' inbb-10.5-MDEV-23836
Diagnostics_area::set_error_status (interrupted ALTER TABLE under LOCK) Analysis: KILL_QUERY is not ignored when local memory used exceeds maximum session memory. Hence the query proceeds, OK is sent and we end up reopening tables that are marked for reopen. During this, kill status is eventually checked and assertion failure happens during trying to send error message because OK has already been sent. Fix: Ok is already sent so statement has already executed. It is too late to give error. So ignore kill.
Diffstat (limited to 'sql/sql_base.cc')
-rw-r--r--sql/sql_base.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 52d4fdefb8f..155f00a246d 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -2609,7 +2609,9 @@ void Locked_tables_list::mark_table_for_reopen(THD *thd, TABLE *table)
bool
Locked_tables_list::reopen_tables(THD *thd, bool need_reopen)
{
- Open_table_context ot_ctx(thd, MYSQL_OPEN_REOPEN);
+ bool is_ok= thd->get_stmt_da()->is_ok();
+ Open_table_context ot_ctx(thd, !is_ok ? MYSQL_OPEN_REOPEN:
+ MYSQL_OPEN_IGNORE_KILLED | MYSQL_OPEN_REOPEN);
uint reopen_count= 0;
MYSQL_LOCK *lock;
MYSQL_LOCK *merged_lock;