From 9467eb6141a6043f9ab1f225b9096e79104a3952 Mon Sep 17 00:00:00 2001 From: Andrew Kryczka Date: Tue, 20 Jun 2017 16:43:09 -0700 Subject: [PATCH] Fix flush assertion with tsan Summary: DBImpl's instance variables should only be accessed with mutex held. I moved an assert later to uphold this rule. DBTest.LastWriteBufferDelay test was sporadically failing TSAN because it tried to flush around the same time the db was destroyed, so the variable was accessed simultaneously by two threads. Closes https://github.com/facebook/rocksdb/pull/2471 Differential Revision: D5286857 Pulled By: ajkr fbshipit-source-id: 435abd84efa601f667c254e320b0bb5a434b971f --- db/db_impl_compaction_flush.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/db_impl_compaction_flush.cc b/db/db_impl_compaction_flush.cc index 7197c3286..12993dd5d 100644 --- a/db/db_impl_compaction_flush.cc +++ b/db/db_impl_compaction_flush.cc @@ -1199,7 +1199,6 @@ Status DBImpl::BackgroundFlush(bool* made_progress, JobContext* job_context, void DBImpl::BackgroundCallFlush() { bool made_progress = false; JobContext job_context(next_job_id_.fetch_add(1), true); - assert(bg_flush_scheduled_); TEST_SYNC_POINT("DBImpl::BackgroundCallFlush:start"); @@ -1207,6 +1206,7 @@ void DBImpl::BackgroundCallFlush() { immutable_db_options_.info_log.get()); { InstrumentedMutexLock l(&mutex_); + assert(bg_flush_scheduled_); num_running_flushes_++; auto pending_outputs_inserted_elem =