]> git-server-git.apps.pok.os.sepia.ceph.com Git - rocksdb.git/commitdiff
Cleanup of ThreadStatusUtil structures should use the DB's reference
authorHerman Lee <herman@fb.com>
Thu, 30 Mar 2017 17:31:26 +0000 (10:31 -0700)
committerIslam AbdelRahman <tec@fb.com>
Wed, 12 Apr 2017 18:34:56 +0000 (11:34 -0700)
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

util/thread_status_util.cc

index dc2e7dcfe45d3cff3c00c46547222d98811d472a..06560083d4a490dea6226194fbf1ae1eab2025aa 100644 (file)
@@ -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) {