diff --git a/src/db_impl_gc.cc b/src/db_impl_gc.cc index fc08f6089..66159fab1 100644 --- a/src/db_impl_gc.cc +++ b/src/db_impl_gc.cc @@ -201,21 +201,26 @@ Status TitanDBImpl::BackgroundGC(LogBuffer* log_buffer, TITAN_LOG_BUFFER(log_buffer, "Titan GC nothing to do"); } else { StopWatch gc_sw(env_, statistics(stats_.get()), TITAN_GC_MICROS); - BlobGCJob blob_gc_job(blob_gc.get(), db_, &mutex_, db_options_, - gc_merge_rewrite, env_, env_options_, - blob_manager_.get(), blob_file_set_.get(), log_buffer, - &shuting_down_, stats_.get()); - s = blob_gc_job.Prepare(); + BlobGCJob *blob_gc_job = new BlobGCJob(blob_gc.get(), db_, &mutex_, db_options_, + gc_merge_rewrite, env_, env_options_, + blob_manager_.get(), blob_file_set_.get(), log_buffer, + &shuting_down_, stats_.get()); + s = blob_gc_job->Prepare(); if (s.ok()) { mutex_.Unlock(); TEST_SYNC_POINT("TitanDBImpl::BackgroundGC::BeforeRunGCJob"); - s = blob_gc_job.Run(); + s = blob_gc_job->Run(); TEST_SYNC_POINT("TitanDBImpl::BackgroundGC::AfterRunGCJob"); mutex_.Lock(); } if (s.ok()) { - s = blob_gc_job.Finish(); + s = blob_gc_job->Finish(); } + + mutex_.Unlock(); + delete blob_gc_job; + mutex_.Lock(); + blob_gc->ReleaseGcFiles(); if (blob_gc->trigger_next() &&