From: Herman Lee Date: Thu, 30 Mar 2017 17:31:26 +0000 (-0700) Subject: Cleanup of ThreadStatusUtil structures should use the DB's reference X-Git-Tag: rocksdb-5.3.3~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c0be8be0cffa92eb55f94cc4a88c3a2267ae101e;p=rocksdb.git Cleanup of ThreadStatusUtil structures should use the DB's reference Summary: instead of thread_local The cleanup path for the rocksdb database might not have the thread_updater_local_cache_ pointer initialized because the thread executing the cleanup is likely not a rocksdb thread. This results in a memory leak detected by Valgrind. The cleanup code path should use the thread_status_updater pointer obtained from the DB object instead of a thread local one. Closes https://github.com/facebook/rocksdb/pull/2059 Differential Revision: D4801611 Pulled By: hermanlee fbshipit-source-id: 407d7de --- diff --git a/util/thread_status_util.cc b/util/thread_status_util.cc index dc2e7dcf..06560083 100644 --- a/util/thread_status_util.cc +++ b/util/thread_status_util.cc @@ -144,10 +144,11 @@ void ThreadStatusUtil::EraseColumnFamilyInfo( } void ThreadStatusUtil::EraseDatabaseInfo(const DB* db) { - if (thread_updater_local_cache_ == nullptr) { + ThreadStatusUpdater* thread_updater = db->GetEnv()->GetThreadStatusUpdater(); + if (thread_updater == nullptr) { return; } - thread_updater_local_cache_->EraseDatabaseInfo(db); + thread_updater->EraseDatabaseInfo(db); } bool ThreadStatusUtil::MaybeInitThreadLocalUpdater(const Env* env) {