Skip to content

Commit 0655078

Browse files
abhinavdangetichiyoung
authored andcommitted
Address possible data race in Notifiable: setSuspended
WARNING: ThreadSanitizer: data race (pid=19078) Write of size 1 at 0x7d600000f078 by thread T10 (mutexes: write M21717): #0 Notifiable::setSuspended(bool) /home/abhinav/couchbase/ep-engine/src/tapconnection.h:764 (ep.so+0x00000005fe6a) couchbase#1 TapProducer::suspendedConnection_UNLOCKED(bool) /home/abhinav/couchbase/ep-engine/src/tapconnection.cc:717 (ep.so+0x00000013b24e) couchbase#2 ExecutorThread::run() /home/abhinav/couchbase/ep-engine/src/executorthread.cc:112 (ep.so+0x0000000f89f6) couchbase#3 launch_executor_thread(void*) /home/abhinav/couchbase/ep-engine/src/executorthread.cc:33 (ep.so+0x0000000f8595) couchbase#4 platform_thread_wrap /home/abhinav/couchbase/platform/src/cb_pthreads.c:23 (libplatform.so.0.1.0+0x000000003d31) Previous read of size 1 at 0x7d600000f078 by main thread (mutexes: write M21715): #0 Notifiable::isSuspended() /home/abhinav/couchbase/ep-engine/src/tapconnection.h:768 (ep.so+0x0000000dfdf2) couchbase#1 EventuallyPersistentEngine::walkTapQueue(void const*, void**, void**, unsigned short*, unsigned char*, unsigned short*, unsigned int*, unsigned short*) /home/abhinav/couchbase/ep-engine/src/ep_engine.cc:2531 (ep.so+0x0000000b7ecc) couchbase#2 EvpTapIterator(engine_interface*, void const*, void**, void**, unsigned short*, unsigned char*, unsigned short*, unsigned int*, unsigned short*) /home/abhinav/couchbase/ep-engine/src/ep_engine.cc:1440 (ep.so+0x0000000d5ad7) couchbase#3 mock_tap_iterator(engine_interface*, void const*, void**, void**, unsigned short*, unsigned char*, unsigned short*, unsigned int*, unsigned short*) /home/abhinav/couchbase/memcached/programs/engine_testapp/engine_testapp.cc:81 (engine_testapp+0x0000000bbda2) couchbase#4 test_tap_ack_stream(engine_interface*, engine_interface_v1*) /home/abhinav/couchbase/ep-engine/tests/ep_testsuite.cc:7353 (ep_testsuite.so+0x0000000504a7) couchbase#5 execute_test(test, char const*, char const*) /home/abhinav/couchbase/memcached/programs/engine_testapp/engine_testapp.cc:1090 (engine_testapp+0x0000000b946c) #6 __libc_start_main /build/buildd/eglibc-2.19/csu/libc-start.c:287 (libc.so.6+0x000000021ec4) Change-Id: I596c93c048767911b052861193822ca17270a5dd Reviewed-on: http://review.couchbase.org/55792 Tested-by: buildbot <[email protected]> Reviewed-by: Chiyoung Seo <[email protected]>
1 parent 47e2483 commit 0655078

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

src/tapconnection.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -760,8 +760,9 @@ class Notifiable {
760760
return notifySent;
761761
}
762762

763-
virtual void setSuspended(bool value) {
764-
suspended = value;
763+
bool setSuspended(bool val) {
764+
bool inverse = !val;
765+
return suspended.compare_exchange_strong(inverse, val);
765766
}
766767

767768
bool isSuspended() {
@@ -770,7 +771,7 @@ class Notifiable {
770771

771772
private:
772773
//! Is this tap connection in a suspended state
773-
bool suspended;
774+
AtomicValue<bool> suspended;
774775
//! Connection is temporarily paused?
775776
AtomicValue<bool> paused;
776777
//! Flag indicating if the notification event is scheduled

0 commit comments

Comments
 (0)