Details
-
Bug
-
Resolution: Fixed
-
Major
-
3.1.4
-
Untriaged
-
Unknown
Description
ThreadSanitizer flags a data race on ConnHandler::cookie - see below.
I believe this race has the potential for an incorrect cookie to be notified when a client reconnects to a TAP stream with the same name as an existing one - i.e. when resuming a stream.
This could happen as the call to ConnHandler::setStream() is performed in a different thread than notifyPausedConnection:
WARNING: ThreadSanitizer: data race (pid=13556)
|
Write of size 8 at 0x7d600000f038 by main thread (mutexes: write M1503):
|
#0 ConnHandler::setCookie(void const*) /home/daver/repos/couchbase/server/ep-engine/src/tapconnection.h:347 (ep.so+0x00000023bb8e)
|
#1 TapConnMap::newProducer(void const*, std::string const&, unsigned int, unsigned long, int, std::vector<unsigned short, std::allocator<unsigned short> > const&, std::map<unsigned short, unsigned long, std::less<unsigned short>, std::allocator<std::pair<unsigned short const, unsigned long> > > const&) /home/daver/repos/couchbase/server/ep-engine/src/connmap.cc:436 (ep.so+0x00000022fdc0)
|
#2 EventuallyPersistentEngine::createTapQueue(void const*, std::string&, unsigned int, void const*, unsigned long) /home/daver/repos/couchbase/server/ep-engine/src/ep_engine.cc:2512 (ep.so+0x00000013f8c2)
|
#3 EvpGetTapIterator(engine_interface*, void const*, void const*, unsigned long, unsigned int, void const*, unsigned long) /home/daver/repos/couchbase/server/ep-engine/src/ep_engine.cc:1388 (ep.so+0x000000137c83)
|
#4 mock_get_tap_iterator /home/daver/repos/couchbase/server/memcached/programs/engine_testapp/engine_testapp.c:460 (engine_testapp+0x0000004bf67c)
|
#5 test_tap_ack_stream(engine_interface*, engine_interface_v1*) /home/daver/repos/couchbase/server/ep-engine/tests/ep_testsuite.cc:6279 (ep_testsuite.so+0x0000000672f1)
|
#6 execute_test /home/daver/repos/couchbase/server/memcached/programs/engine_testapp/engine_testapp.c:1042 (engine_testapp+0x0000004ba8ff)
|
#7 main /home/daver/repos/couchbase/server/memcached/programs/engine_testapp/engine_testapp.c:1296 (engine_testapp+0x0000004b8861)
|
|
Previous read of size 8 at 0x7d600000f038 by thread T15 (mutexes: write M1502):
|
#0 ConnHandler::getCookie() const /home/daver/repos/couchbase/server/ep-engine/src/tapconnection.h:343 (ep.so+0x00000020ea1e)
|
#1 ConnMap::notifyPausedConnection(SingleThreadedRCPtr<ConnHandler>, bool) /home/daver/repos/couchbase/server/ep-engine/src/connmap.cc:238 (ep.so+0x00000022d4b2)
|
#2 bool TapConnMap::performOp<void*>(std::string const&, TapOperation<void*>&, void*) /home/daver/repos/couchbase/server/ep-engine/src/connmap.h:392 (ep.so+0x00000007f38b)
|
#3 BackfillDiskLoad::run() /home/daver/repos/couchbase/server/ep-engine/src/backfill.cc:134 (ep.so+0x00000007c4b5)
|
#4 ExecutorThread::run() /home/daver/repos/couchbase/server/ep-engine/src/executorthread.cc:109 (ep.so+0x0000001e3532)
|
#5 launch_executor_thread(void*) /home/daver/repos/couchbase/server/ep-engine/src/executorthread.cc:34 (ep.so+0x0000001e2b5a)
|
#6 platform_thread_wrap /home/daver/repos/couchbase/server/platform/src/cb_pthreads.c:19 (libplatform.so.0.1.0+0x0000000035dc)
|
Note: already fixed in watson - http://review.couchbase.org/55794
Attachments
Issue Links
- blocks
-
MB-19323 3.1.6 release
- Closed