diff options
author | Sergei Golubchik <sergii@pisem.net> | 2014-05-07 17:33:33 +0200 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2014-05-07 17:33:33 +0200 |
commit | a2807e41e8fcac00711cf4465e910327bfd69fe2 (patch) | |
tree | c94b0a32226b09e8675f8b9b559a610c554cda6b /storage/xtradb/sync | |
parent | 8ee9d19607d84aeebf97b704a19453f6a772299b (diff) | |
parent | 6cb3146af896eb7d27aed6815428008f105e8ae8 (diff) | |
download | mariadb-git-a2807e41e8fcac00711cf4465e910327bfd69fe2.tar.gz |
xtradb 5.6.17-65.0
Diffstat (limited to 'storage/xtradb/sync')
-rw-r--r-- | storage/xtradb/sync/sync0arr.cc | 2 | ||||
-rw-r--r-- | storage/xtradb/sync/sync0sync.cc | 22 |
2 files changed, 21 insertions, 3 deletions
diff --git a/storage/xtradb/sync/sync0arr.cc b/storage/xtradb/sync/sync0arr.cc index 9dd0259b3f9..126cf8de0d5 100644 --- a/storage/xtradb/sync/sync0arr.cc +++ b/storage/xtradb/sync/sync0arr.cc @@ -1098,7 +1098,7 @@ sync_array_print_long_waits( os_thread_sleep(30000000); - srv_print_innodb_monitor = old_val; + srv_print_innodb_monitor = static_cast<my_bool>(old_val); fprintf(stderr, "InnoDB: ###### Diagnostic info printed" " to the standard error stream\n"); diff --git a/storage/xtradb/sync/sync0sync.cc b/storage/xtradb/sync/sync0sync.cc index d6033d9d2ab..e698b7dcf10 100644 --- a/storage/xtradb/sync/sync0sync.cc +++ b/storage/xtradb/sync/sync0sync.cc @@ -209,7 +209,10 @@ UNIV_INTERN mysql_pfs_key_t sync_thread_mutex_key; /** Global list of database mutexes (not OS mutexes) created. */ UNIV_INTERN ut_list_base_node_t mutex_list; -/** Mutex protecting the mutex_list variable */ +/** Global list of priority mutexes. A subset of mutex_list */ +UNIV_INTERN UT_LIST_BASE_NODE_T(ib_prio_mutex_t) prio_mutex_list; + +/** Mutex protecting the mutex_list and prio_mutex_list variables */ UNIV_INTERN ib_mutex_t mutex_list_mutex; #ifdef UNIV_PFS_MUTEX @@ -353,6 +356,10 @@ mutex_create_func( cmutex_name); mutex->high_priority_waiters = 0; mutex->high_priority_event = os_event_create(); + + mutex_enter(&mutex_list_mutex); + UT_LIST_ADD_FIRST(list, prio_mutex_list, mutex); + mutex_exit(&mutex_list_mutex); } /******************************************************************//** @@ -426,6 +433,10 @@ mutex_free_func( /*============*/ ib_prio_mutex_t* mutex) /*!< in: mutex */ { + mutex_enter(&mutex_list_mutex); + UT_LIST_REMOVE(list, prio_mutex_list, mutex); + mutex_exit(&mutex_list_mutex); + ut_a(mutex->high_priority_waiters == 0); os_event_free(mutex->high_priority_event); mutex_free_func(&mutex->base_mutex); @@ -1572,6 +1583,7 @@ sync_init(void) /* Init the mutex list and create the mutex to protect it. */ UT_LIST_INIT(mutex_list); + UT_LIST_INIT(prio_mutex_list); mutex_create(mutex_list_mutex_key, &mutex_list_mutex, SYNC_NO_ORDER_CHECK); #ifdef UNIV_SYNC_DEBUG @@ -1630,10 +1642,16 @@ void sync_close(void) /*===========*/ { - ib_mutex_t* mutex; + ib_mutex_t* mutex; + ib_prio_mutex_t* prio_mutex; sync_array_close(); + for (prio_mutex = UT_LIST_GET_FIRST(prio_mutex_list); prio_mutex;) { + mutex_free(prio_mutex); + prio_mutex = UT_LIST_GET_FIRST(prio_mutex_list); + } + for (mutex = UT_LIST_GET_FIRST(mutex_list); mutex != NULL; /* No op */) { |