summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2020-02-06 14:52:11 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2020-02-06 14:52:11 +0200
commitcd3bdc09dbcec30926abda69b2277657f5fcb08d (patch)
treea8eca935338aad2db60528645a9fe79faa0f97f1
parent6d214415c9547593fa0fd22b25fc4f6cd1c6cd65 (diff)
downloadmariadb-git-cd3bdc09dbcec30926abda69b2277657f5fcb08d.tar.gz
MDEV-18582: Fix a race condition
srv_export_innodb_status(): While gathering innodb_mem_adaptive_hash, acquire btr_search_latches[i] in order to prevent a race condition with buffer pool resizing.
-rw-r--r--storage/innobase/srv/srv0srv.cc2
1 files changed, 2 insertions, 0 deletions
diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc
index e027c03784a..a16d37e7e32 100644
--- a/storage/innobase/srv/srv0srv.cc
+++ b/storage/innobase/srv/srv0srv.cc
@@ -1156,6 +1156,7 @@ srv_export_innodb_status(void)
ulint mem_adaptive_hash = 0;
ut_ad(btr_search_sys->hash_tables);
for (ulong i = 0; i < btr_ahi_parts; i++) {
+ rw_lock_s_lock(btr_search_latches[i]);
hash_table_t* ht = btr_search_sys->hash_tables[i];
ut_ad(ht);
@@ -1167,6 +1168,7 @@ srv_export_innodb_status(void)
mem_adaptive_hash += mem_heap_get_size(ht->heap)
+ ht->n_cells * sizeof(hash_cell_t);
+ rw_lock_s_unlock(btr_search_latches[i]);
}
export_vars.innodb_mem_adaptive_hash = mem_adaptive_hash;
#endif