diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-06-05 15:20:20 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-06-05 15:22:46 +0300 |
commit | 3677dd5cb438e7b3ddb46a547f36fc2691c031a9 (patch) | |
tree | 4a0616f0056114249d7577b8dc53c6ec29aa9ae7 | |
parent | 1828196f73a66ef0e4594cdf32c6652149f8b3f8 (diff) | |
download | mariadb-git-3677dd5cb438e7b3ddb46a547f36fc2691c031a9.tar.gz |
MDEV-22646: Fix a memory leak
btr_search_sys_free(): Free btr_search_sys->hash_tables.
The leak was introduced in commit ad2bf1129cfa85c00072b46e0355fe14bf69ee54.
-rw-r--r-- | storage/innobase/btr/btr0sea.cc | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/storage/innobase/btr/btr0sea.cc b/storage/innobase/btr/btr0sea.cc index 5614adc082a..ff1241740a4 100644 --- a/storage/innobase/btr/btr0sea.cc +++ b/storage/innobase/btr/btr0sea.cc @@ -203,23 +203,33 @@ btr_search_sys_create(ulint hash_size) } /** Frees the adaptive search system at a database shutdown. */ -void -btr_search_sys_free() +void btr_search_sys_free() { - ut_ad(btr_search_sys != NULL && btr_search_latches != NULL); + ut_ad(btr_search_sys); + ut_ad(btr_search_latches); - ut_free(btr_search_sys); - btr_search_sys = NULL; + if (btr_search_sys->hash_tables) + { + for (ulint i= 0; i < btr_ahi_parts; ++i) + { + mem_heap_free(btr_search_sys->hash_tables[i]->heap); + hash_table_free(btr_search_sys->hash_tables[i]); + } + ut_free(btr_search_sys->hash_tables); + } - /* Free all latches. */ - for (ulint i = 0; i < btr_ahi_parts; ++i) { + ut_free(btr_search_sys); + btr_search_sys= NULL; - rw_lock_free(btr_search_latches[i]); - ut_free(btr_search_latches[i]); - } + /* Free all latches. */ + for (ulint i= 0; i < btr_ahi_parts; ++i) + { + rw_lock_free(btr_search_latches[i]); + ut_free(btr_search_latches[i]); + } - ut_free(btr_search_latches); - btr_search_latches = NULL; + ut_free(btr_search_latches); + btr_search_latches= NULL; } /** Set index->ref_count = 0 on all indexes of a table. |