From 8c7f7bae47922b44ddae1db587afc7ee029c8b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Wed, 22 Jul 2020 08:48:14 +0300 Subject: [PATCH 1/4] Fix regex on test. --- mysql-test/suite/galera/t/galera_var_cluster_conf_id.test | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/suite/galera/t/galera_var_cluster_conf_id.test b/mysql-test/suite/galera/t/galera_var_cluster_conf_id.test index dd4a630035d..668ace297a8 100644 --- a/mysql-test/suite/galera/t/galera_var_cluster_conf_id.test +++ b/mysql-test/suite/galera/t/galera_var_cluster_conf_id.test @@ -1,9 +1,9 @@ --source include/galera_cluster.inc --connection node_1 ---replace_regex /18446744073709551/ERROR/ /[0-9+]/#/ +--replace_regex /18446744073709551/ERROR/ /[0-9]+/#/ show status like 'wsrep_cluster_conf_id'; --connection node_2 ---replace_regex /18446744073709551/ERROR/ /[0-9+]/#/ +--replace_regex /18446744073709551/ERROR/ /[0-9]+/#/ show status like 'wsrep_cluster_conf_id'; From 1ca52b969aeb704337747432e33e3a942146b6dd Mon Sep 17 00:00:00 2001 From: Thirunarayanan Balathandayuthapani Date: Wed, 22 Jul 2020 14:40:56 +0530 Subject: [PATCH 2/4] MDEV-23254 Replace FSP_FLAGS_HAS_PAGE_COMPRESSION with fil_space_t::is_compressed InnoDB should replace FSP_FLAGS_HAS_PAGE_COMPRESSION check with fil_space_t::is_compressed(). fil_space_t::is_compressed() checks for both non full crc32 and crc32 format. --- storage/innobase/fil/fil0fil.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc index af7cbe7a284..57303a25300 100644 --- a/storage/innobase/fil/fil0fil.cc +++ b/storage/innobase/fil/fil0fil.cc @@ -817,7 +817,7 @@ fil_space_extend_must_retry( os_offset_t(FIL_IBD_FILE_INITIAL_SIZE << srv_page_size_shift)); *success = os_file_set_size(node->name, node->handle, new_size, - FSP_FLAGS_HAS_PAGE_COMPRESSION(space->flags)); + space->is_compressed()); os_has_said_disk_full = *success; if (*success) { @@ -2910,7 +2910,7 @@ fil_ibd_create( return NULL; } - const bool is_compressed = FSP_FLAGS_HAS_PAGE_COMPRESSION(flags); + const bool is_compressed = fil_space_t::is_compressed(flags); bool punch_hole = is_compressed; #ifdef _WIN32 @@ -3740,7 +3740,7 @@ fil_ibd_load( /* Adjust the memory-based flags that would normally be set by dict_tf_to_fsp_flags(). In recovery, we have no data dictionary. */ ulint flags = file.flags(); - if (FSP_FLAGS_HAS_PAGE_COMPRESSION(flags)) { + if (fil_space_t::is_compressed(flags)) { flags |= page_zip_level << FSP_FLAGS_MEM_COMPRESSION_LEVEL; } From ddb8309e8c1bac8d419fe5c224665c6dca1e2878 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Tue, 21 Jul 2020 10:31:10 +0200 Subject: [PATCH 3/4] MDEV-21997 Server crashes in LEX::create_item_ident_sp upon use of unknown identifier If there is no current_select and variable is not found among SP variables it can be only an error. --- mysql-test/main/parser.result | 55 +++++++++++++++++++++++++++++ mysql-test/main/parser.test | 66 +++++++++++++++++++++++++++++++++++ sql/sql_lex.cc | 7 ++++ 3 files changed, 128 insertions(+) diff --git a/mysql-test/main/parser.result b/mysql-test/main/parser.result index 42fdc01617b..ad22cd886f7 100644 --- a/mysql-test/main/parser.result +++ b/mysql-test/main/parser.result @@ -1838,4 +1838,59 @@ ERROR 42S02: Table 'test.t1' doesn't exist SET STATEMENT max_statement_time=180 FOR BACKUP LOCK test.t1; SET STATEMENT max_statement_time=180 FOR BACKUP UNLOCK; set SQL_MODE=@save_sql_mode; +# +# MDEV-21997: Server crashes in LEX::create_item_ident_sp +# upon use of unknown identifier +# +/*! IF 1 IN ( SELECT 2 ) OR foo = 3 THEN */ SELECT 4; +ERROR 42000: Undeclared variable: foo +BEGIN NOT ATOMIC +IF (SELECT 2) OR foo = 3 THEN +SELECT 4; +END IF ; +END; +$$ +ERROR 42000: Undeclared variable: foo +# ... but if declare it then it still work +BEGIN NOT ATOMIC +DECLARE foo int; +IF (SELECT 2) OR foo = 3 THEN +SELECT 4; +END IF ; +END; +$$ +4 +4 +CASE (SELECT 2) OR foo +WHEN 1 THEN +SET @x=10; +$$ +ERROR 42000: Undeclared variable: foo +/*! WHILE (SELECT 2) OR foo */ +SET @x=10; +END WHILE; +$$ +ERROR 42000: Undeclared variable: foo +REPEAT +SET @x=10; +UNTIL (SELECT 2) OR foo +END REPEAT; +$$ +ERROR 42000: Undeclared variable: foo +FOR i IN 1..(SELECT 2) OR foo +DO +SET @x=10; +END FOR; +$$ +ERROR 42000: Undeclared variable: foo +# ... but automatic FOR variable still work +FOR i IN 1..2 +DO +SELECT i; +END FOR; +$$ +i +1 +i +2 # End of 10.4 tests diff --git a/mysql-test/main/parser.test b/mysql-test/main/parser.test index 8aa2fb528ea..09fe73b7dbe 100644 --- a/mysql-test/main/parser.test +++ b/mysql-test/main/parser.test @@ -1613,4 +1613,70 @@ SET STATEMENT max_statement_time=180 FOR BACKUP LOCK test.t1; SET STATEMENT max_statement_time=180 FOR BACKUP UNLOCK; set SQL_MODE=@save_sql_mode; + +--echo # +--echo # MDEV-21997: Server crashes in LEX::create_item_ident_sp +--echo # upon use of unknown identifier +--echo # + +--error ER_SP_UNDECLARED_VAR +/*! IF 1 IN ( SELECT 2 ) OR foo = 3 THEN */ SELECT 4; + + +DELIMITER $$; + +--error ER_SP_UNDECLARED_VAR +BEGIN NOT ATOMIC + IF (SELECT 2) OR foo = 3 THEN + SELECT 4; + END IF ; +END; +$$ + +--echo # ... but if declare it then it still work +BEGIN NOT ATOMIC + DECLARE foo int; + IF (SELECT 2) OR foo = 3 THEN + SELECT 4; + END IF ; +END; +$$ + +--error ER_SP_UNDECLARED_VAR +CASE (SELECT 2) OR foo +WHEN 1 THEN + SET @x=10; +$$ + +--error ER_SP_UNDECLARED_VAR +/*! WHILE (SELECT 2) OR foo */ + SET @x=10; +END WHILE; +$$ + +--error ER_SP_UNDECLARED_VAR +REPEAT + SET @x=10; +UNTIL (SELECT 2) OR foo +END REPEAT; +$$ + +--error ER_SP_UNDECLARED_VAR +FOR i IN 1..(SELECT 2) OR foo +DO + SET @x=10; +END FOR; +$$ + +--echo # ... but automatic FOR variable still work +FOR i IN 1..2 +DO + SELECT i; +END FOR; +$$ + +DELIMITER ;$$ + + + --echo # End of 10.4 tests diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index eb22534f4fb..c21a5dee088 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -7598,6 +7598,13 @@ Item *LEX::create_item_ident_sp(THD *thd, Lex_ident_sys_st *name, return new (thd->mem_root) Item_func_sqlerrm(thd); } + if (!current_select) + { + // we are out of SELECT or FOR so it is syntax error + my_error(ER_SP_UNDECLARED_VAR, MYF(0), name->str); + return NULL; + } + if (current_select->parsing_place == FOR_LOOP_BOUND) return create_item_for_loop_bound(thd, &null_clex_str, &null_clex_str, name); From 5f2628d1eea21d9732f582b77782b072e5e04014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Wed, 22 Jul 2020 16:17:53 +0300 Subject: [PATCH 4/4] MDEV-22778 Slow InnoDB shutdown on large instance Starting with MDEV-17441 we would no longer have os_once, and we would always initialize zip_pad_info_t::mutex and dict_table_t::autoinc_mutex, even for tables are not in ROW_FORMAT=COMPRESSED nor include any AUTO_INCREMENT column. mutex_free() on those unnecessary objects would make shutdown very slow compared to older versions. Let us use std::mutex for those two mutexes, to reduce the overhead. The critical sections protected by these mutexes is very small, and therefore contention or the need for any instrumentation should be unlikely. --- storage/innobase/dict/dict0dict.cc | 14 ++++---- storage/innobase/dict/dict0mem.cc | 4 +-- storage/innobase/handler/ha_innodb.cc | 49 ++++++++++++--------------- storage/innobase/include/dict0dict.h | 4 --- storage/innobase/include/dict0mem.h | 7 ++-- storage/innobase/include/sync0sync.h | 2 -- storage/innobase/include/sync0types.h | 3 -- storage/innobase/page/page0zip.cc | 2 +- storage/innobase/sync/sync0debug.cc | 6 ---- storage/innobase/sync/sync0sync.cc | 3 -- 10 files changed, 36 insertions(+), 58 deletions(-) diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc index 07fcd4f57c1..3bf701b556a 100644 --- a/storage/innobase/dict/dict0dict.cc +++ b/storage/innobase/dict/dict0dict.cc @@ -985,7 +985,7 @@ inline void dict_sys_t::add(dict_table_t* table) ulint fold = ut_fold_string(table->name.m_name); - mutex_create(LATCH_ID_AUTOINC, &table->autoinc_mutex); + new (&table->autoinc_mutex) std::mutex(); /* Look for a table with the same name: error if such exists */ { @@ -1115,7 +1115,7 @@ dict_index_t *dict_index_t::clone() const (mem_heap_zalloc(heap, n_uniq * sizeof *stat_n_sample_sizes)); index->stat_n_non_null_key_vals= static_cast (mem_heap_zalloc(heap, n_uniq * sizeof *stat_n_non_null_key_vals)); - mutex_create(LATCH_ID_ZIP_PAD_MUTEX, &index->zip_pad.mutex); + new (&index->zip_pad.mutex) std::mutex(); return index; } @@ -1777,7 +1777,7 @@ void dict_sys_t::remove(dict_table_t* table, bool lru, bool keep) UT_DELETE(table->vc_templ); } - mutex_free(&table->autoinc_mutex); + table->autoinc_mutex.~mutex(); if (keep) { return; @@ -6200,10 +6200,10 @@ dict_index_zip_success( return; } - mutex_enter(&index->zip_pad.mutex); + index->zip_pad.mutex.lock(); ++index->zip_pad.success; dict_index_zip_pad_update(&index->zip_pad, zip_threshold); - mutex_exit(&index->zip_pad.mutex); + index->zip_pad.mutex.unlock(); } /*********************************************************************//** @@ -6220,10 +6220,10 @@ dict_index_zip_failure( return; } - mutex_enter(&index->zip_pad.mutex); + index->zip_pad.mutex.lock(); ++index->zip_pad.failure; dict_index_zip_pad_update(&index->zip_pad, zip_threshold); - mutex_exit(&index->zip_pad.mutex); + index->zip_pad.mutex.unlock(); } /*********************************************************************//** diff --git a/storage/innobase/dict/dict0mem.cc b/storage/innobase/dict/dict0mem.cc index bbc5535668c..e9e0d33bf9f 100644 --- a/storage/innobase/dict/dict0mem.cc +++ b/storage/innobase/dict/dict0mem.cc @@ -789,7 +789,7 @@ dict_mem_index_create( dict_mem_fill_index_struct(index, heap, index_name, type, n_fields); - mutex_create(LATCH_ID_ZIP_PAD_MUTEX, &index->zip_pad.mutex); + new (&index->zip_pad.mutex) std::mutex(); if (type & DICT_SPATIAL) { index->rtr_track = new @@ -1098,7 +1098,7 @@ dict_mem_index_free( ut_ad(index); ut_ad(index->magic_n == DICT_INDEX_MAGIC_N); - mutex_free(&index->zip_pad.mutex); + index->zip_pad.mutex.~mutex(); if (dict_index_is_spatial(index)) { for (auto& rtr_info : index->rtr_track->rtr_active) { diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index aaadcb94946..9678c466cb4 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -582,7 +582,6 @@ static PSI_cond_info all_innodb_conds[] = { performance schema instrumented if "UNIV_PFS_MUTEX" is defined */ static PSI_mutex_info all_innodb_mutexes[] = { - PSI_KEY(autoinc_mutex), # ifndef PFS_SKIP_BUFFER_MUTEX_RWLOCK PSI_KEY(buffer_block_mutex), # endif /* !PFS_SKIP_BUFFER_MUTEX_RWLOCK */ @@ -635,7 +634,6 @@ static PSI_mutex_info all_innodb_mutexes[] = { PSI_KEY(rtr_match_mutex), PSI_KEY(rtr_path_mutex), PSI_KEY(trx_sys_mutex), - PSI_KEY(zip_pad_mutex) }; # endif /* UNIV_PFS_MUTEX */ @@ -2587,7 +2585,7 @@ ha_innobase::innobase_reset_autoinc( if (error == DB_SUCCESS) { dict_table_autoinc_initialize(m_prebuilt->table, autoinc); - mutex_exit(&m_prebuilt->table->autoinc_mutex); + m_prebuilt->table->autoinc_mutex.unlock(); } return(error); @@ -6016,7 +6014,7 @@ initialize_auto_increment(dict_table_t* table, const Field* field) const unsigned col_no = innodb_col_no(field); - mutex_enter(&table->autoinc_mutex); + table->autoinc_mutex.lock(); table->persistent_autoinc = 1 + dict_table_get_nth_col_pos(table, col_no, NULL); @@ -6046,7 +6044,7 @@ initialize_auto_increment(dict_table_t* table, const Field* field) innobase_get_int_col_max_value(field)); } - mutex_exit(&table->autoinc_mutex); + table->autoinc_mutex.unlock(); } /** Open an InnoDB table @@ -7867,7 +7865,7 @@ ha_innobase::innobase_lock_autoinc(void) switch (innobase_autoinc_lock_mode) { case AUTOINC_NO_LOCKING: /* Acquire only the AUTOINC mutex. */ - mutex_enter(&m_prebuilt->table->autoinc_mutex); + m_prebuilt->table->autoinc_mutex.lock(); break; case AUTOINC_NEW_STYLE_LOCKING: @@ -7876,24 +7874,19 @@ ha_innobase::innobase_lock_autoinc(void) transaction has already acquired the AUTOINC lock on behalf of a LOAD FILE or INSERT ... SELECT etc. type of statement. */ - if (thd_sql_command(m_user_thd) == SQLCOM_INSERT - || thd_sql_command(m_user_thd) == SQLCOM_REPLACE - || thd_sql_command(m_user_thd) == SQLCOM_END // RBR event - ) { - + switch (thd_sql_command(m_user_thd)) { + case SQLCOM_INSERT: + case SQLCOM_REPLACE: + case SQLCOM_END: // RBR event /* Acquire the AUTOINC mutex. */ - mutex_enter(&m_prebuilt->table->autoinc_mutex); - + m_prebuilt->table->autoinc_mutex.lock(); /* We need to check that another transaction isn't already holding the AUTOINC lock on the table. */ - if (m_prebuilt->table->n_waiting_or_granted_auto_inc_locks) { - /* Release the mutex to avoid deadlocks and - fall back to old style locking. */ - mutex_exit(&m_prebuilt->table->autoinc_mutex); - } else { + if (!m_prebuilt->table->n_waiting_or_granted_auto_inc_locks) { /* Do not fall back to old style locking. */ - break; + DBUG_RETURN(error); } + m_prebuilt->table->autoinc_mutex.unlock(); } /* Use old style locking. */ /* fall through */ @@ -7905,7 +7898,7 @@ ha_innobase::innobase_lock_autoinc(void) if (error == DB_SUCCESS) { /* Acquire the AUTOINC mutex. */ - mutex_enter(&m_prebuilt->table->autoinc_mutex); + m_prebuilt->table->autoinc_mutex.lock(); } break; @@ -7933,7 +7926,7 @@ ha_innobase::innobase_set_max_autoinc( if (error == DB_SUCCESS) { dict_table_autoinc_update_if_greater(m_prebuilt->table, auto_inc); - mutex_exit(&m_prebuilt->table->autoinc_mutex); + m_prebuilt->table->autoinc_mutex.unlock(); } return(error); @@ -12782,7 +12775,7 @@ create_table_info_t::create_table_update_dict() autoinc = 1; } - mutex_enter(&innobase_table->autoinc_mutex); + innobase_table->autoinc_mutex.lock(); dict_table_autoinc_initialize(innobase_table, autoinc); if (innobase_table->is_temporary()) { @@ -12807,7 +12800,7 @@ create_table_info_t::create_table_update_dict() } } - mutex_exit(&innobase_table->autoinc_mutex); + innobase_table->autoinc_mutex.unlock(); } innobase_parse_hint_from_comment(m_thd, innobase_table, m_form->s); @@ -16497,7 +16490,7 @@ ha_innobase::innobase_get_autoinc( /* It should have been initialized during open. */ if (*value == 0) { m_prebuilt->autoinc_error = DB_UNSUPPORTED; - mutex_exit(&m_prebuilt->table->autoinc_mutex); + m_prebuilt->table->autoinc_mutex.unlock(); } } @@ -16521,7 +16514,7 @@ ha_innobase::innobase_peek_autoinc(void) innodb_table = m_prebuilt->table; - mutex_enter(&innodb_table->autoinc_mutex); + innodb_table->autoinc_mutex.lock(); auto_inc = dict_table_autoinc_read(innodb_table); @@ -16530,7 +16523,7 @@ ha_innobase::innobase_peek_autoinc(void) " '" << innodb_table->name << "'"; } - mutex_exit(&innodb_table->autoinc_mutex); + innodb_table->autoinc_mutex.unlock(); return(auto_inc); } @@ -16637,7 +16630,7 @@ ha_innobase::get_auto_increment( /* Out of range number. Let handler::update_auto_increment() take care of this */ m_prebuilt->autoinc_last_value = 0; - mutex_exit(&m_prebuilt->table->autoinc_mutex); + m_prebuilt->table->autoinc_mutex.unlock(); *nb_reserved_values= 0; return; } @@ -16680,7 +16673,7 @@ ha_innobase::get_auto_increment( m_prebuilt->autoinc_offset = offset; m_prebuilt->autoinc_increment = increment; - mutex_exit(&m_prebuilt->table->autoinc_mutex); + m_prebuilt->table->autoinc_mutex.unlock(); } /*******************************************************************//** diff --git a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h index 35309fc1b54..c5f1ef96ea6 100644 --- a/storage/innobase/include/dict0dict.h +++ b/storage/innobase/include/dict0dict.h @@ -291,7 +291,6 @@ UNIV_INLINE void dict_table_autoinc_initialize(dict_table_t* table, ib_uint64_t value) { - ut_ad(mutex_own(&table->autoinc_mutex)); table->autoinc = value; } @@ -304,7 +303,6 @@ UNIV_INLINE ib_uint64_t dict_table_autoinc_read(const dict_table_t* table) { - ut_ad(mutex_own(&table->autoinc_mutex)); return(table->autoinc); } @@ -318,8 +316,6 @@ UNIV_INLINE bool dict_table_autoinc_update_if_greater(dict_table_t* table, ib_uint64_t value) { - ut_ad(mutex_own(&table->autoinc_mutex)); - if (value > table->autoinc) { table->autoinc = value; diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h index 259da23fcd9..ed392df3c05 100644 --- a/storage/innobase/include/dict0mem.h +++ b/storage/innobase/include/dict0mem.h @@ -51,6 +51,7 @@ Created 1/8/1996 Heikki Tuuri #include #include #include +#include /* Forward declaration. */ struct ib_rbt_t; @@ -932,7 +933,9 @@ extern ulong zip_pad_max; an uncompressed page should be left as padding to avoid compression failures. This estimate is based on a self-adapting heuristic. */ struct zip_pad_info_t { - SysMutex mutex; /*!< mutex protecting the info */ + /** Dummy assignment operator for dict_index_t::clone() */ + zip_pad_info_t &operator=(const zip_pad_info_t&) { return *this; } + std::mutex mutex; /*!< mutex protecting the info */ Atomic_relaxed pad; /*!< number of bytes used as pad */ ulint success;/*!< successful compression ops during @@ -2240,7 +2243,7 @@ public: lock_t* autoinc_lock; /** Mutex protecting the autoincrement counter. */ - ib_mutex_t autoinc_mutex; + std::mutex autoinc_mutex; /** Autoinc counter value to give to the next inserted row. */ ib_uint64_t autoinc; diff --git a/storage/innobase/include/sync0sync.h b/storage/innobase/include/sync0sync.h index ddbfa451d22..28d954df8c1 100644 --- a/storage/innobase/include/sync0sync.h +++ b/storage/innobase/include/sync0sync.h @@ -50,7 +50,6 @@ instrumentation due to their large number of instances. */ #ifdef UNIV_PFS_MUTEX /* Key defines to register InnoDB mutexes with performance schema */ -extern mysql_pfs_key_t autoinc_mutex_key; extern mysql_pfs_key_t buffer_block_mutex_key; extern mysql_pfs_key_t buf_pool_mutex_key; extern mysql_pfs_key_t buf_pool_zip_mutex_key; @@ -105,7 +104,6 @@ extern mysql_pfs_key_t event_mutex_key; extern mysql_pfs_key_t event_manager_mutex_key; extern mysql_pfs_key_t sync_array_mutex_key; extern mysql_pfs_key_t thread_mutex_key; -extern mysql_pfs_key_t zip_pad_mutex_key; extern mysql_pfs_key_t row_drop_list_mutex_key; extern mysql_pfs_key_t rw_trx_hash_element_mutex_key; #endif /* UNIV_PFS_MUTEX */ diff --git a/storage/innobase/include/sync0types.h b/storage/innobase/include/sync0types.h index 4d2a7c8ff28..32fdc89d6e4 100644 --- a/storage/innobase/include/sync0types.h +++ b/storage/innobase/include/sync0types.h @@ -253,7 +253,6 @@ enum latch_level_t { SYNC_IBUF_HEADER, SYNC_DICT_HEADER, SYNC_STATS_AUTO_RECALC, - SYNC_DICT_AUTOINC_MUTEX, SYNC_DICT, SYNC_FTS_CACHE, @@ -282,7 +281,6 @@ enum latch_level_t { up its meta-data. See sync0debug.c. */ enum latch_id_t { LATCH_ID_NONE = 0, - LATCH_ID_AUTOINC, LATCH_ID_BUF_BLOCK_MUTEX, LATCH_ID_BUF_POOL, LATCH_ID_BUF_POOL_ZIP, @@ -335,7 +333,6 @@ enum latch_id_t { LATCH_ID_EVENT_MANAGER, LATCH_ID_EVENT_MUTEX, LATCH_ID_SYNC_ARRAY_MUTEX, - LATCH_ID_ZIP_PAD_MUTEX, LATCH_ID_OS_AIO_READ_MUTEX, LATCH_ID_OS_AIO_WRITE_MUTEX, LATCH_ID_OS_AIO_LOG_MUTEX, diff --git a/storage/innobase/page/page0zip.cc b/storage/innobase/page/page0zip.cc index 95832e3e147..eb94aad207c 100644 --- a/storage/innobase/page/page0zip.cc +++ b/storage/innobase/page/page0zip.cc @@ -1607,7 +1607,7 @@ page_zip_fields_free( { if (index) { dict_table_t* table = index->table; - mutex_free(&index->zip_pad.mutex); + index->zip_pad.mutex.~mutex(); mem_heap_free(index->heap); dict_mem_table_free(table); diff --git a/storage/innobase/sync/sync0debug.cc b/storage/innobase/sync/sync0debug.cc index d1ebcd52df3..485e867dfe6 100644 --- a/storage/innobase/sync/sync0debug.cc +++ b/storage/innobase/sync/sync0debug.cc @@ -505,7 +505,6 @@ LatchDebug::LatchDebug() LEVEL_MAP_INSERT(SYNC_IBUF_HEADER); LEVEL_MAP_INSERT(SYNC_DICT_HEADER); LEVEL_MAP_INSERT(SYNC_STATS_AUTO_RECALC); - LEVEL_MAP_INSERT(SYNC_DICT_AUTOINC_MUTEX); LEVEL_MAP_INSERT(SYNC_DICT); LEVEL_MAP_INSERT(SYNC_FTS_CACHE); LEVEL_MAP_INSERT(SYNC_DICT_OPERATION); @@ -765,7 +764,6 @@ LatchDebug::check_order( case SYNC_NOREDO_RSEG: case SYNC_PURGE_LATCH: case SYNC_PURGE_QUEUE: - case SYNC_DICT_AUTOINC_MUTEX: case SYNC_DICT_OPERATION: case SYNC_DICT_HEADER: case SYNC_TRX_I_S_RWLOCK: @@ -1276,8 +1274,6 @@ sync_latch_meta_init() /* The latches should be ordered on latch_id_t. So that we can index directly into the vector to update and fetch meta-data. */ - LATCH_ADD_MUTEX(AUTOINC, SYNC_DICT_AUTOINC_MUTEX, autoinc_mutex_key); - #if defined PFS_SKIP_BUFFER_MUTEX_RWLOCK || defined PFS_GROUP_BUFFER_SYNC LATCH_ADD_MUTEX(BUF_BLOCK_MUTEX, SYNC_BUF_BLOCK, PFS_NOT_INSTRUMENTED); #else @@ -1417,8 +1413,6 @@ sync_latch_meta_init() LATCH_ADD_MUTEX(SYNC_ARRAY_MUTEX, SYNC_NO_ORDER_CHECK, sync_array_mutex_key); - LATCH_ADD_MUTEX(ZIP_PAD_MUTEX, SYNC_NO_ORDER_CHECK, zip_pad_mutex_key); - LATCH_ADD_MUTEX(OS_AIO_READ_MUTEX, SYNC_NO_ORDER_CHECK, PFS_NOT_INSTRUMENTED); diff --git a/storage/innobase/sync/sync0sync.cc b/storage/innobase/sync/sync0sync.cc index c52064c7bb9..6b365b86ace 100644 --- a/storage/innobase/sync/sync0sync.cc +++ b/storage/innobase/sync/sync0sync.cc @@ -35,8 +35,6 @@ Created 9/5/1995 Heikki Tuuri #include "sync0sync.h" #ifdef UNIV_PFS_MUTEX -/* Key to register autoinc_mutex with performance schema */ -mysql_pfs_key_t autoinc_mutex_key; mysql_pfs_key_t buffer_block_mutex_key; mysql_pfs_key_t buf_pool_mutex_key; mysql_pfs_key_t buf_pool_zip_mutex_key; @@ -91,7 +89,6 @@ mysql_pfs_key_t event_mutex_key; mysql_pfs_key_t event_manager_mutex_key; mysql_pfs_key_t sync_array_mutex_key; mysql_pfs_key_t thread_mutex_key; -mysql_pfs_key_t zip_pad_mutex_key; mysql_pfs_key_t row_drop_list_mutex_key; mysql_pfs_key_t rw_trx_hash_element_mutex_key; #endif /* UNIV_PFS_MUTEX */