diff options
-rw-r--r-- | include/my_sys.h | 4 | ||||
-rw-r--r-- | include/mysql/plugin_audit.h.pp | 4 | ||||
-rw-r--r-- | include/mysql/plugin_auth.h.pp | 4 | ||||
-rw-r--r-- | include/mysql/plugin_ftparser.h.pp | 4 | ||||
-rw-r--r-- | include/mysql/service_thd_wait.h | 4 | ||||
-rw-r--r-- | sql/item_func.cc | 8 | ||||
-rw-r--r-- | sql/mdl.cc | 4 | ||||
-rw-r--r-- | sql/scheduler.cc | 3 |
8 files changed, 19 insertions, 16 deletions
diff --git a/include/my_sys.h b/include/my_sys.h index ed96abc7711..e13ef1af067 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -627,8 +627,8 @@ extern FILE *my_freopen(const char *path, const char *mode, FILE *stream); extern int my_fclose(FILE *fd,myf MyFlags); extern File my_fileno(FILE *fd); extern int my_chsize(File fd,my_off_t newlength, int filler, myf MyFlags); -void thr_set_sync_wait_callback(void (*before_sync)(void), - void (*after_sync)(void)); +extern void thr_set_sync_wait_callback(void (*before_sync)(void), + void (*after_sync)(void)); extern int my_sync(File fd, myf my_flags); extern int my_sync_dir(const char *dir_name, myf my_flags); extern int my_sync_dir_by_file(const char *file_name, myf my_flags); diff --git a/include/mysql/plugin_audit.h.pp b/include/mysql/plugin_audit.h.pp index f74078c531f..732503e176a 100644 --- a/include/mysql/plugin_audit.h.pp +++ b/include/mysql/plugin_audit.h.pp @@ -46,10 +46,10 @@ typedef enum _thd_wait_type_e { THD_WAIT_LAST= 11 } thd_wait_type; extern struct thd_wait_service_st { - void (*thd_wait_begin_func)(void*, thd_wait_type); + void (*thd_wait_begin_func)(void*, int); void (*thd_wait_end_func)(void*); } *thd_wait_service; -void thd_wait_begin(void* thd, thd_wait_type wait_type); +void thd_wait_begin(void* thd, int wait_type); void thd_wait_end(void* thd); #include <mysql/service_thread_scheduler.h> struct scheduler_functions; diff --git a/include/mysql/plugin_auth.h.pp b/include/mysql/plugin_auth.h.pp index aed764ddb51..e65278c518e 100644 --- a/include/mysql/plugin_auth.h.pp +++ b/include/mysql/plugin_auth.h.pp @@ -46,10 +46,10 @@ typedef enum _thd_wait_type_e { THD_WAIT_LAST= 11 } thd_wait_type; extern struct thd_wait_service_st { - void (*thd_wait_begin_func)(void*, thd_wait_type); + void (*thd_wait_begin_func)(void*, int); void (*thd_wait_end_func)(void*); } *thd_wait_service; -void thd_wait_begin(void* thd, thd_wait_type wait_type); +void thd_wait_begin(void* thd, int wait_type); void thd_wait_end(void* thd); #include <mysql/service_thread_scheduler.h> struct scheduler_functions; diff --git a/include/mysql/plugin_ftparser.h.pp b/include/mysql/plugin_ftparser.h.pp index f3ca2070e60..c29eac45b19 100644 --- a/include/mysql/plugin_ftparser.h.pp +++ b/include/mysql/plugin_ftparser.h.pp @@ -46,10 +46,10 @@ typedef enum _thd_wait_type_e { THD_WAIT_LAST= 11 } thd_wait_type; extern struct thd_wait_service_st { - void (*thd_wait_begin_func)(void*, thd_wait_type); + void (*thd_wait_begin_func)(void*, int); void (*thd_wait_end_func)(void*); } *thd_wait_service; -void thd_wait_begin(void* thd, thd_wait_type wait_type); +void thd_wait_begin(void* thd, int wait_type); void thd_wait_end(void* thd); #include <mysql/service_thread_scheduler.h> struct scheduler_functions; diff --git a/include/mysql/service_thd_wait.h b/include/mysql/service_thd_wait.h index a7ce2dbf501..f5d2a75f5fc 100644 --- a/include/mysql/service_thd_wait.h +++ b/include/mysql/service_thd_wait.h @@ -78,7 +78,7 @@ typedef enum _thd_wait_type_e { } thd_wait_type; extern struct thd_wait_service_st { - void (*thd_wait_begin_func)(MYSQL_THD, thd_wait_type); + void (*thd_wait_begin_func)(MYSQL_THD, int); void (*thd_wait_end_func)(MYSQL_THD); } *thd_wait_service; @@ -90,7 +90,7 @@ extern struct thd_wait_service_st { #else -void thd_wait_begin(MYSQL_THD thd, thd_wait_type wait_type); +void thd_wait_begin(MYSQL_THD thd, int wait_type); void thd_wait_end(MYSQL_THD thd); #endif diff --git a/sql/item_func.cc b/sql/item_func.cc index 9195cf4f8c7..a149bb7f955 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -3877,12 +3877,11 @@ longlong Item_func_get_lock::val_int() timed_cond.set_timeout(timeout * ULL(1000000000)); error= 0; + thd_wait_begin(thd, THD_WAIT_USER_LOCK); while (ull->locked && !thd->killed) { DBUG_PRINT("info", ("waiting on lock")); - thd_wait_begin(thd, THD_WAIT_USER_LOCK); error= timed_cond.wait(&ull->cond, &LOCK_user_locks); - thd_wait_end(thd); if (error == ETIMEDOUT || error == ETIME) { DBUG_PRINT("info", ("lock wait timeout")); @@ -3890,6 +3889,7 @@ longlong Item_func_get_lock::val_int() } error= 0; } + thd_wait_end(thd); if (ull->locked) { @@ -4107,15 +4107,15 @@ longlong Item_func_sleep::val_int() thd->mysys_var->current_cond= &cond; error= 0; + thd_wait_begin(thd, THD_WAIT_SLEEP); while (!thd->killed) { - thd_wait_begin(thd, THD_WAIT_SLEEP); error= timed_cond.wait(&cond, &LOCK_user_locks); - thd_wait_end(thd); if (error == ETIMEDOUT || error == ETIME) break; error= 0; } + thd_wait_end(thd); thd_proc_info(thd, 0); mysql_mutex_unlock(&LOCK_user_locks); mysql_mutex_lock(&thd->mysys_var->mutex); diff --git a/sql/mdl.cc b/sql/mdl.cc index 6cab1238b43..21410db2d22 100644 --- a/sql/mdl.cc +++ b/sql/mdl.cc @@ -975,14 +975,14 @@ MDL_wait::timed_wait(THD *thd, struct timespec *abs_timeout, old_msg= thd_enter_cond(thd, &m_COND_wait_status, &m_LOCK_wait_status, wait_state_name); + thd_wait_begin(thd, THD_WAIT_META_DATA_LOCK); while (!m_wait_status && !thd_killed(thd) && wait_result != ETIMEDOUT && wait_result != ETIME) { - thd_wait_begin(thd, THD_WAIT_META_DATA_LOCK); wait_result= mysql_cond_timedwait(&m_COND_wait_status, &m_LOCK_wait_status, abs_timeout); - thd_wait_end(thd); } + thd_wait_end(thd); if (m_wait_status == EMPTY) { diff --git a/sql/scheduler.cc b/sql/scheduler.cc index 328ad45b4b8..a3848e20be5 100644 --- a/sql/scheduler.cc +++ b/sql/scheduler.cc @@ -80,6 +80,8 @@ scheduler_functions *thread_scheduler= NULL; */ /**@{*/ +extern "C" +{ static void scheduler_wait_lock_begin(void) { MYSQL_CALLBACK(thread_scheduler, thd_wait_begin, (current_thd, THD_WAIT_TABLE_LOCK)); @@ -97,6 +99,7 @@ static void scheduler_wait_sync_begin(void) { static void scheduler_wait_sync_end(void) { MYSQL_CALLBACK(thread_scheduler, thd_wait_end, (current_thd)); } +}; /**@}*/ /** |