A follow-up for 5.5 version of fix for bug#54360 "Deadlock
DROP/ALTER/CREATE DATABASE with open HANDLER". Remove wait_for_condition() which became unused after database locks were replaced with MDL scoped locks. If one needs functionality provided by this call one can always use THD::enter_cond()/exit_cond() methods. Also removed an unused include from sql_db.cc and updated comment describing one of used includes to reflect current situation.
This commit is contained in:
parent
41a3dfe490
commit
8ad1aa562f
@ -2412,51 +2412,6 @@ void drop_open_table(THD *thd, TABLE *table, const char *db_name,
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Wait for condition but allow the user to send a kill to mysqld
|
||||
|
||||
SYNOPSIS
|
||||
wait_for_condition()
|
||||
thd Thread handler
|
||||
mutex mutex that is currently hold that is associated with condition
|
||||
Will be unlocked on return
|
||||
cond Condition to wait for
|
||||
*/
|
||||
|
||||
void wait_for_condition(THD *thd, mysql_mutex_t *mutex, mysql_cond_t *cond)
|
||||
{
|
||||
/* Wait until the current table is up to date */
|
||||
const char *proc_info;
|
||||
thd->mysys_var->current_mutex= mutex;
|
||||
thd->mysys_var->current_cond= cond;
|
||||
proc_info=thd->proc_info;
|
||||
thd_proc_info(thd, "Waiting for table");
|
||||
DBUG_ENTER("wait_for_condition");
|
||||
DEBUG_SYNC(thd, "waiting_for_table");
|
||||
if (!thd->killed)
|
||||
mysql_cond_wait(cond, mutex);
|
||||
|
||||
/*
|
||||
We must unlock mutex first to avoid deadlock becasue conditions are
|
||||
sent to this thread by doing locks in the following order:
|
||||
lock(mysys_var->mutex)
|
||||
lock(mysys_var->current_mutex)
|
||||
|
||||
One by effect of this that one can only use wait_for_condition with
|
||||
condition variables that are guranteed to not disapper (freed) even if this
|
||||
mutex is unlocked
|
||||
*/
|
||||
|
||||
mysql_mutex_unlock(mutex);
|
||||
mysql_mutex_lock(&thd->mysys_var->mutex);
|
||||
thd->mysys_var->current_mutex= 0;
|
||||
thd->mysys_var->current_cond= 0;
|
||||
thd_proc_info(thd, proc_info);
|
||||
mysql_mutex_unlock(&thd->mysys_var->mutex);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Check that table exists in table definition cache, on disk
|
||||
or in some storage engine.
|
||||
|
@ -203,8 +203,6 @@ int setup_conds(THD *thd, TABLE_LIST *tables, TABLE_LIST *leaves,
|
||||
COND **conds);
|
||||
int setup_ftfuncs(SELECT_LEX* select);
|
||||
int init_ftfuncs(THD *thd, SELECT_LEX* select, bool no_order);
|
||||
void wait_for_condition(THD *thd, mysql_mutex_t *mutex,
|
||||
mysql_cond_t *cond);
|
||||
bool lock_table_names(THD *thd, TABLE_LIST *table_list,
|
||||
TABLE_LIST *table_list_end, ulong lock_wait_timeout,
|
||||
uint flags);
|
||||
|
@ -21,14 +21,12 @@
|
||||
#include "unireg.h"
|
||||
#include "sql_db.h"
|
||||
#include "sql_cache.h" // query_cache_*
|
||||
#include "lock.h" // wait_if_global_read_lock,
|
||||
// start_waiting_global_read_lock
|
||||
#include "lock.h" // lock_schema_name
|
||||
#include "sql_table.h" // build_table_filename,
|
||||
// filename_to_tablename
|
||||
#include "sql_rename.h" // mysql_rename_tables
|
||||
#include "sql_acl.h" // SELECT_ACL, DB_ACLS,
|
||||
// acl_get, check_grant_db
|
||||
#include "sql_base.h" // wait_for_condition
|
||||
#include "log_event.h" // Query_log_event
|
||||
#include <mysys_err.h>
|
||||
#include "sp.h"
|
||||
|
Loading…
x
Reference in New Issue
Block a user