diff options
author | Nikita Malyavin <nikitamalyavin@gmail.com> | 2019-07-25 22:17:04 +1000 |
---|---|---|
committer | Nikita Malyavin <nikitamalyavin@gmail.com> | 2021-04-27 11:51:17 +0300 |
commit | 300253acf12bf66fdea8e64abae5d717c289e559 (patch) | |
tree | 1166e1aca1f0378d147c76d73bb9ca02cc2001d5 /storage/innobase/srv | |
parent | a35cde8cd8364edc0a23752fc5fde442c8b78a0a (diff) | |
download | mariadb-git-300253acf12bf66fdea8e64abae5d717c289e559.tar.gz |
revive innodb_debug_sync
innodb_debug_sync was introduced in commit
b393e2cb0c079b30563dcc87a62002c9c778643c and reverted in
commit fc58c1721631fcc6c9414482b3b7e90cd8e7325d due to memory leak reported
by valgrind, see MDEV-21336.
The leak is now fixed by adding `rw_lock_free(&slot->debug_sync_lock)`
after background thread working loop is finished, and the patch is
reapplied, with respect to c++98 fixes by Marko.
The missing DEBUG_SYNC for MDEV-18546 in row0vers.cc is also reapplied.
Diffstat (limited to 'storage/innobase/srv')
-rw-r--r-- | storage/innobase/srv/srv0srv.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index 44e0946f067..56c717e142b 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -2601,6 +2601,13 @@ DECLARE_THREAD(srv_worker_thread)( slot = srv_reserve_slot(SRV_WORKER); +#ifdef UNIV_DEBUG + UT_LIST_INIT(slot->debug_sync, + &srv_slot_t::debug_sync_t::debug_sync_list); + rw_lock_create(PFS_NOT_INSTRUMENTED, &slot->debug_sync_lock, + SYNC_NO_ORDER_CHECK); +#endif + ut_a(srv_n_purge_threads > 1); ut_a(ulong(my_atomic_loadlint(&srv_sys.n_threads_active[SRV_WORKER])) < srv_n_purge_threads); @@ -2625,6 +2632,8 @@ DECLARE_THREAD(srv_worker_thread)( purge_sys->latch here. */ } while (purge_sys->state != PURGE_STATE_EXIT); + ut_d(rw_lock_free(&slot->debug_sync_lock)); + srv_free_slot(slot); rw_lock_x_lock(&purge_sys->latch); @@ -2848,6 +2857,12 @@ DECLARE_THREAD(srv_purge_coordinator_thread)( slot = srv_reserve_slot(SRV_PURGE); +#ifdef UNIV_DEBUG + UT_LIST_INIT(slot->debug_sync, + &srv_slot_t::debug_sync_t::debug_sync_list); + rw_lock_create(PFS_NOT_INSTRUMENTED, &slot->debug_sync_lock, + SYNC_NO_ORDER_CHECK); +#endif ulint rseg_history_len = trx_sys->rseg_history_len; do { @@ -2881,6 +2896,8 @@ DECLARE_THREAD(srv_purge_coordinator_thread)( shutdown state. */ ut_a(srv_get_task_queue_length() == 0); + ut_d(rw_lock_free(&slot->debug_sync_lock)); + srv_free_slot(slot); /* Note that we are shutting down. */ |