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
This commit is contained in:
Herman Lee 2017-03-30 10:31:26 -07:00 committed by Islam AbdelRahman
parent 4fb65f9ea7
commit c0be8be0cf

View 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) {