mirror of
https://github.com/MariaDB/server.git
synced 2025-09-02 09:41:40 +03:00
A pre-requisite patch for the fix for Bug#52044.
This patch also fixes Bug#55452 "SET PASSWORD is replicated twice in RBR mode". The goal of this patch is to remove the release of metadata locks from close_thread_tables(). This is necessary to not mistakenly release the locks in the course of a multi-step operation that involves multiple close_thread_tables() or close_tables_for_reopen(). On the same token, move statement commit outside close_thread_tables(). Other cleanups: Cleanup COM_FIELD_LIST. Don't call close_thread_tables() in COM_SHUTDOWN -- there are no open tables there that can be closed (we leave the locked tables mode in THD destructor, and this close_thread_tables() won't leave it anyway). Make open_and_lock_tables() and open_and_lock_tables_derived() call close_thread_tables() upon failure. Remove the calls to close_thread_tables() that are now unnecessary. Simplify the back off condition in Open_table_context. Streamline metadata lock handling in LOCK TABLES implementation. Add asserts to ensure correct life cycle of statement transaction in a session. Remove a piece of dead code that has also become redundant after the fix for Bug 37521.
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
#include "sql_priv.h"
|
||||
#include "unireg.h"
|
||||
#include "sql_parse.h" // check_access
|
||||
#include "sql_base.h" // close_thread_tables
|
||||
#include "sql_base.h" // close_mysql_tables
|
||||
#include "sql_show.h" // append_definer
|
||||
#include "events.h"
|
||||
#include "sql_db.h" // check_db_dir_existence
|
||||
@@ -754,7 +754,6 @@ Events::fill_schema_events(THD *thd, TABLE_LIST *tables, COND * /* cond */)
|
||||
{
|
||||
char *db= NULL;
|
||||
int ret;
|
||||
Open_tables_backup open_tables_backup;
|
||||
DBUG_ENTER("Events::fill_schema_events");
|
||||
|
||||
if (check_if_system_tables_error())
|
||||
@@ -773,15 +772,7 @@ Events::fill_schema_events(THD *thd, TABLE_LIST *tables, COND * /* cond */)
|
||||
DBUG_RETURN(1);
|
||||
db= thd->lex->select_lex.db;
|
||||
}
|
||||
/*
|
||||
Reset and backup of the currently open tables in this thread
|
||||
is a way to allow SELECTs from INFORMATION_SCHEMA.events under
|
||||
LOCK TABLES and in pre-locked mode. See also
|
||||
Events::show_create_event for additional comments.
|
||||
*/
|
||||
thd->reset_n_backup_open_tables_state(&open_tables_backup);
|
||||
ret= db_repository->fill_schema_events(thd, tables, db);
|
||||
thd->restore_backup_open_tables_state(&open_tables_backup);
|
||||
|
||||
DBUG_RETURN(ret);
|
||||
}
|
||||
@@ -1161,8 +1152,7 @@ Events::load_events_from_db(THD *thd)
|
||||
end:
|
||||
end_read_record(&read_record_info);
|
||||
|
||||
close_thread_tables(thd);
|
||||
|
||||
close_mysql_tables(thd);
|
||||
DBUG_RETURN(ret);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user