Loading include/thr_lock.h +1 −1 Original line number Diff line number Diff line Loading @@ -107,7 +107,7 @@ void thr_unlock(THR_LOCK_DATA *data); int thr_multi_lock(THR_LOCK_DATA **data,uint count); void thr_multi_unlock(THR_LOCK_DATA **data,uint count); void thr_abort_locks(THR_LOCK *lock); void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread); bool thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread); void thr_print_locks(void); /* For debugging */ my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data); my_bool thr_reschedule_write_lock(THR_LOCK_DATA *data); Loading mysys/thr_lock.c +5 −2 Original line number Diff line number Diff line Loading @@ -966,9 +966,10 @@ void thr_abort_locks(THR_LOCK *lock) This is used to abort all locks for a specific thread */ void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread) bool thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread) { THR_LOCK_DATA *data; bool found= FALSE; DBUG_ENTER("thr_abort_locks_for_thread"); pthread_mutex_lock(&lock->mutex); Loading @@ -978,6 +979,7 @@ void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread) { DBUG_PRINT("info",("Aborting read-wait lock")); data->type= TL_UNLOCK; /* Mark killed */ found= TRUE; pthread_cond_signal(data->cond); data->cond= 0; /* Removed from list */ Loading @@ -993,6 +995,7 @@ void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread) { DBUG_PRINT("info",("Aborting write-wait lock")); data->type= TL_UNLOCK; found= TRUE; pthread_cond_signal(data->cond); data->cond= 0; Loading @@ -1003,7 +1006,7 @@ void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread) } } pthread_mutex_unlock(&lock->mutex); DBUG_VOID_RETURN; DBUG_RETURN(found); } Loading scripts/Makefile.am +1 −5 Original line number Diff line number Diff line Loading @@ -32,9 +32,7 @@ bin_SCRIPTS = @server_scripts@ \ mysqldumpslow \ mysql_explain_log \ mysql_tableinfo \ mysqld_multi \ make_win_src_distribution \ make_win_binary_distribution mysqld_multi EXTRA_SCRIPTS = make_binary_distribution.sh \ make_sharedlib_distribution.sh \ Loading Loading @@ -63,8 +61,6 @@ EXTRA_DIST = $(EXTRA_SCRIPTS) \ mysqlaccess.conf \ mysqlbug pkgdata_DATA = make_binary_distribution make_sharedlib_distribution # mysqlbug should be distributed built so that people can report build # failures with it. CLEANFILES = @server_scripts@ \ Loading sql/lock.cc +17 −6 Original line number Diff line number Diff line Loading @@ -333,20 +333,25 @@ void mysql_lock_abort(THD *thd, TABLE *table) /* Abort one thread / table combination */ void mysql_lock_abort_for_thread(THD *thd, TABLE *table) bool mysql_lock_abort_for_thread(THD *thd, TABLE *table) { MYSQL_LOCK *locked; TABLE *write_lock_used; bool result= FALSE; DBUG_ENTER("mysql_lock_abort_for_thread"); if ((locked = get_lock_data(thd,&table,1,1,&write_lock_used))) { for (uint i=0; i < locked->lock_count; i++) thr_abort_locks_for_thread(locked->locks[i]->lock, { bool found; found= thr_abort_locks_for_thread(locked->locks[i]->lock, table->in_use->real_id); result|= found; } my_free((gptr) locked,MYF(0)); } DBUG_VOID_RETURN; DBUG_RETURN(result); } Loading Loading @@ -542,8 +547,14 @@ int lock_table_name(THD *thd, TABLE_LIST *table_list) my_free((gptr) table,MYF(0)); DBUG_RETURN(-1); } if (remove_table_from_cache(thd, db, table_list->real_name)) { if (remove_table_from_cache(thd, db, table_list->real_name, RTFC_NO_FLAG)) { DBUG_RETURN(1); // Table is in use } } DBUG_RETURN(0); } Loading sql/mysql_priv.h +6 −2 Original line number Diff line number Diff line Loading @@ -606,8 +606,12 @@ bool rename_temporary_table(THD* thd, TABLE *table, const char *new_db, const char *table_name); void remove_db_from_cache(const my_string db); void flush_tables(); #define RTFC_NO_FLAG 0x0000 #define RTFC_OWNED_BY_THD_FLAG 0x0001 #define RTFC_WAIT_OTHER_THREAD_FLAG 0x0002 #define RTFC_CHECK_KILLED_FLAG 0x0004 bool remove_table_from_cache(THD *thd, const char *db, const char *table, bool return_if_owned_by_thd=0); uint flags); bool close_cached_tables(THD *thd, bool wait_for_refresh, TABLE_LIST *tables); void copy_field_from_tmp_record(Field *field,int offset); int fill_record(List<Item> &fields,List<Item> &values, bool ignore_errors); Loading Loading @@ -776,7 +780,7 @@ void mysql_unlock_read_tables(THD *thd, MYSQL_LOCK *sql_lock); void mysql_unlock_some_tables(THD *thd, TABLE **table,uint count); void mysql_lock_remove(THD *thd, MYSQL_LOCK *locked,TABLE *table); void mysql_lock_abort(THD *thd, TABLE *table); void mysql_lock_abort_for_thread(THD *thd, TABLE *table); bool mysql_lock_abort_for_thread(THD *thd, TABLE *table); MYSQL_LOCK *mysql_lock_merge(MYSQL_LOCK *a,MYSQL_LOCK *b); bool lock_global_read_lock(THD *thd); void unlock_global_read_lock(THD *thd); Loading Loading
include/thr_lock.h +1 −1 Original line number Diff line number Diff line Loading @@ -107,7 +107,7 @@ void thr_unlock(THR_LOCK_DATA *data); int thr_multi_lock(THR_LOCK_DATA **data,uint count); void thr_multi_unlock(THR_LOCK_DATA **data,uint count); void thr_abort_locks(THR_LOCK *lock); void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread); bool thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread); void thr_print_locks(void); /* For debugging */ my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data); my_bool thr_reschedule_write_lock(THR_LOCK_DATA *data); Loading
mysys/thr_lock.c +5 −2 Original line number Diff line number Diff line Loading @@ -966,9 +966,10 @@ void thr_abort_locks(THR_LOCK *lock) This is used to abort all locks for a specific thread */ void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread) bool thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread) { THR_LOCK_DATA *data; bool found= FALSE; DBUG_ENTER("thr_abort_locks_for_thread"); pthread_mutex_lock(&lock->mutex); Loading @@ -978,6 +979,7 @@ void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread) { DBUG_PRINT("info",("Aborting read-wait lock")); data->type= TL_UNLOCK; /* Mark killed */ found= TRUE; pthread_cond_signal(data->cond); data->cond= 0; /* Removed from list */ Loading @@ -993,6 +995,7 @@ void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread) { DBUG_PRINT("info",("Aborting write-wait lock")); data->type= TL_UNLOCK; found= TRUE; pthread_cond_signal(data->cond); data->cond= 0; Loading @@ -1003,7 +1006,7 @@ void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread) } } pthread_mutex_unlock(&lock->mutex); DBUG_VOID_RETURN; DBUG_RETURN(found); } Loading
scripts/Makefile.am +1 −5 Original line number Diff line number Diff line Loading @@ -32,9 +32,7 @@ bin_SCRIPTS = @server_scripts@ \ mysqldumpslow \ mysql_explain_log \ mysql_tableinfo \ mysqld_multi \ make_win_src_distribution \ make_win_binary_distribution mysqld_multi EXTRA_SCRIPTS = make_binary_distribution.sh \ make_sharedlib_distribution.sh \ Loading Loading @@ -63,8 +61,6 @@ EXTRA_DIST = $(EXTRA_SCRIPTS) \ mysqlaccess.conf \ mysqlbug pkgdata_DATA = make_binary_distribution make_sharedlib_distribution # mysqlbug should be distributed built so that people can report build # failures with it. CLEANFILES = @server_scripts@ \ Loading
sql/lock.cc +17 −6 Original line number Diff line number Diff line Loading @@ -333,20 +333,25 @@ void mysql_lock_abort(THD *thd, TABLE *table) /* Abort one thread / table combination */ void mysql_lock_abort_for_thread(THD *thd, TABLE *table) bool mysql_lock_abort_for_thread(THD *thd, TABLE *table) { MYSQL_LOCK *locked; TABLE *write_lock_used; bool result= FALSE; DBUG_ENTER("mysql_lock_abort_for_thread"); if ((locked = get_lock_data(thd,&table,1,1,&write_lock_used))) { for (uint i=0; i < locked->lock_count; i++) thr_abort_locks_for_thread(locked->locks[i]->lock, { bool found; found= thr_abort_locks_for_thread(locked->locks[i]->lock, table->in_use->real_id); result|= found; } my_free((gptr) locked,MYF(0)); } DBUG_VOID_RETURN; DBUG_RETURN(result); } Loading Loading @@ -542,8 +547,14 @@ int lock_table_name(THD *thd, TABLE_LIST *table_list) my_free((gptr) table,MYF(0)); DBUG_RETURN(-1); } if (remove_table_from_cache(thd, db, table_list->real_name)) { if (remove_table_from_cache(thd, db, table_list->real_name, RTFC_NO_FLAG)) { DBUG_RETURN(1); // Table is in use } } DBUG_RETURN(0); } Loading
sql/mysql_priv.h +6 −2 Original line number Diff line number Diff line Loading @@ -606,8 +606,12 @@ bool rename_temporary_table(THD* thd, TABLE *table, const char *new_db, const char *table_name); void remove_db_from_cache(const my_string db); void flush_tables(); #define RTFC_NO_FLAG 0x0000 #define RTFC_OWNED_BY_THD_FLAG 0x0001 #define RTFC_WAIT_OTHER_THREAD_FLAG 0x0002 #define RTFC_CHECK_KILLED_FLAG 0x0004 bool remove_table_from_cache(THD *thd, const char *db, const char *table, bool return_if_owned_by_thd=0); uint flags); bool close_cached_tables(THD *thd, bool wait_for_refresh, TABLE_LIST *tables); void copy_field_from_tmp_record(Field *field,int offset); int fill_record(List<Item> &fields,List<Item> &values, bool ignore_errors); Loading Loading @@ -776,7 +780,7 @@ void mysql_unlock_read_tables(THD *thd, MYSQL_LOCK *sql_lock); void mysql_unlock_some_tables(THD *thd, TABLE **table,uint count); void mysql_lock_remove(THD *thd, MYSQL_LOCK *locked,TABLE *table); void mysql_lock_abort(THD *thd, TABLE *table); void mysql_lock_abort_for_thread(THD *thd, TABLE *table); bool mysql_lock_abort_for_thread(THD *thd, TABLE *table); MYSQL_LOCK *mysql_lock_merge(MYSQL_LOCK *a,MYSQL_LOCK *b); bool lock_global_read_lock(THD *thd); void unlock_global_read_lock(THD *thd); Loading