Skip to content

Commit 3b58202

Browse files
abhinavdangetichiyoung
authored andcommitted
Address possible data race in vbucket.cc: numHpChks
WARNING: ThreadSanitizer: data race (pid=23450) Write of size 8 at 0x7d680001f678 by thread T5 (mutexes: write M11600, write M15531): #0 VBucket::notifyCheckpointPersisted(EventuallyPersistentEngine&, unsigned long, bool) /home/abhinav/couchbase/ep-engine/src/vbucket.cc:356 (ep.so+0x00000014b3e3) couchbase#1 EventuallyPersistentStore::flushVBucket(unsigned short) /home/abhinav/couchbase/ep-engine/src/ep.cc:3334 (ep.so+0x000000099b9f) couchbase#2 Flusher::flushVB() /home/abhinav/couchbase/ep-engine/src/flusher.cc:296 (ep.so+0x0000000ffe7f) couchbase#3 Flusher::step(GlobalTask*) /home/abhinav/couchbase/ep-engine/src/flusher.cc:186 (ep.so+0x0000000fe375) couchbase#4 FlusherTask::run() /home/abhinav/couchbase/ep-engine/src/tasks.cc:62 (ep.so+0x00000013c928) couchbase#5 ExecutorThread::run() /home/abhinav/couchbase/ep-engine/src/executorthread.cc:112 (ep.so+0x0000000f9503) #6 launch_executor_thread(void*) /home/abhinav/couchbase/ep-engine/src/executorthread.cc:33 (ep.so+0x0000000f9085) #7 platform_thread_wrap /home/abhinav/couchbase/platform/src/cb_pthreads.c:23 (libplatform.so.0.1.0+0x000000003d31) Previous read of size 8 at 0x7d680001f678 by main thread (mutexes: write M910146210457775232): #0 VBucket::getHighPriorityChkSize() /home/abhinav/couchbase/ep-engine/src/vbucket.cc:401 (ep.so+0x00000014b7d9) couchbase#1 VBucketCountVisitor::visitBucket(RCPtr<VBucket>&) /home/abhinav/couchbase/ep-engine/src/ep_engine.cc:3030 (ep.so+0x0000000ba940) couchbase#2 VBucketCountAggregator::visitBucket(RCPtr<VBucket>&) /home/abhinav/couchbase/ep-engine/src/ep_engine.cc:3067 (ep.so+0x0000000baf43) couchbase#3 EventuallyPersistentStore::visit(VBucketVisitor&) /home/abhinav/couchbase/ep-engine/src/ep.cc:3719 (ep.so+0x000000089917) couchbase#4 EventuallyPersistentEngine::doEngineStats(void const*, void (*)(char const*, unsigned short, char const*, unsigned int, void const*)) /home/abhinav/couchbase/ep-engine/src/ep_engine.cc:3093 (ep.so+0x0000000bb5ab) couchbase#5 EventuallyPersistentEngine::getStats(void const*, char const*, int, void (*)(char const*, unsigned short, char const*, unsigned int, void const*)) /home/abhinav/couchbase/ep-engine/src/ep_engine.cc:4554 (ep.so+0x0000000c5cac) #6 EvpGetStats(engine_interface*, void const*, char const*, int, void (*)(char const*, unsigned short, char const*, unsigned int, void const*)) /home/abhinav/couchbase/ep-engine/src/ep_engine.cc:213 (ep.so+0x0000000b4dee) #7 mock_get_stats(engine_interface*, void const*, char const*, int, void (*)(char const*, unsigned short, char const*, unsigned int, void const*)) /home/abhinav/couchbase/memcached/programs/engine_testapp/engine_testapp.cc:239 (engine_testapp+0x0000000ba9ad) #8 get_int_stat(engine_interface*, engine_interface_v1*, char const*, char const*) /home/abhinav/couchbase/ep-engine/tests/ep_test_apis.cc:990 (ep_testsuite.so+0x0000000aebb1) #9 test_access_scanner(engine_interface*, engine_interface_v1*) /home/abhinav/couchbase/ep-engine/tests/ep_testsuite.cc:8569 (ep_testsuite.so+0x00000002efd7) #10 execute_test(test, char const*, char const*) /home/abhinav/couchbase/memcached/programs/engine_testapp/engine_testapp.cc:1090 (engine_testapp+0x0000000b946c) #11 __libc_start_main /build/buildd/eglibc-2.19/csu/libc-start.c:287 (libc.so.6+0x000000021ec4) Change-Id: I98021a535bd78d34e31d428e364192bb2ef33dcf Reviewed-on: http://review.couchbase.org/55777 Reviewed-by: Chiyoung Seo <[email protected]> Tested-by: Chiyoung Seo <[email protected]>
1 parent 49156bd commit 3b58202

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

src/vbucket.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ void VBucket::addHighPriorityVBEntry(uint64_t id, const void *cookie,
309309
++shard->highPriorityCount;
310310
}
311311
hpChks.push_back(HighPriorityVBEntry(cookie, id, isBySeqno));
312-
numHpChks = hpChks.size();
312+
numHpChks.store(hpChks.size());
313313
}
314314

315315
void VBucket::notifyCheckpointPersisted(EventuallyPersistentEngine &e,
@@ -353,7 +353,7 @@ void VBucket::notifyCheckpointPersisted(EventuallyPersistentEngine &e,
353353
++entry;
354354
}
355355
}
356-
numHpChks = hpChks.size();
356+
numHpChks.store(hpChks.size());
357357
lh.unlock();
358358

359359
std::map<const void*, ENGINE_ERROR_CODE>::iterator itr = toNotify.begin();
@@ -398,7 +398,7 @@ void VBucket::adjustCheckpointFlushTimeout(size_t wall_time) {
398398
}
399399

400400
size_t VBucket::getHighPriorityChkSize() {
401-
return numHpChks;
401+
return numHpChks.load();
402402
}
403403

404404
size_t VBucket::getCheckpointFlushTimeout() {

src/vbucket.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,7 @@ class VBucket : public RCValue {
525525

526526
Mutex hpChksMutex;
527527
std::list<HighPriorityVBEntry> hpChks;
528-
volatile size_t numHpChks; // size of list hpChks (to avoid MB-9434)
528+
AtomicValue<size_t> numHpChks; // size of list hpChks (to avoid MB-9434)
529529
KVShard *shard;
530530

531531
Mutex bfMutex;

0 commit comments

Comments
 (0)