Thread Sanitizer warning
Kevyn-Alexandre Paré
kapare at rogue-research.com
Fri May 10 17:20:35 CEST 2013
Hi,
We have played with the TSan (Thread Sanitizer https://code.google.com/p/thread-sanitizer/) and discover some warning that we were interested in sharing to see if others have opinion on the matter.
If you are interested I could try to do an example to reproduce the warning. The code simply create a thread and call ev::async::send().
Here's the log:
==================
WARNING: ThreadSanitizer: data race (pid=22551)
Write of size 4 at 0x7f1bb4ba4afc by thread T1:
#0 evpipe_write ev.c:0 (libev.so.4+0x000000005c76)
#1 ev_async_send ??:0 (libev.so.4+0x00000003ed68)
#2 ev::async::send() /home/builder/rogue_nightly_build/scratch/ubuntu-utests-nirs-TSan-x86_64-clang-Debug-bin/externalProjects/Install/LibEv/include/ev++.h:799 (exe+0x0000000ace06)
#3 NDEventManager::SetAsyncEventWatcher(RRBaseObject*) /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/NIRSDaemon/NDEventManager.cxx:505 (exe+0x0000000aa7bf)
#4 NDNotification::RunNotificationThread() /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/UnitTests/UT_NDEventManager.cxx:76 (exe+0x00000009e8b6)
#5 NDNotification::NotificationThread(void*) /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/UnitTests/UT_NDEventManager.cxx:62 (exe+0x00000009e4ae)
Previous read of size 4 at 0x7f1bb4ba4afc by main thread:
#0 ev_run ??:0 (libev.so.4+0x000000018dbd)
#1 ev::loop_ref::run(int) /home/builder/rogue_nightly_build/scratch/ubuntu-utests-nirs-TSan-x86_64-clang-Debug-bin/externalProjects/Install/LibEv/include/ev++.h:212 (exe+0x0000000ab046)
#2 NDEventManager::Run() /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/NIRSDaemon/NDEventManager.cxx:73 (exe+0x0000000a3634)
#3 NDEventManager_TestEventTypeAsync_Test::TestBody() /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/UnitTests/UT_NDEventManager.cxx:200 (exe+0x00000008bf2c)
#4 void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) ??:0 (exe+0x0000001a6a82)
#5 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) ??:0 (exe+0x00000014b51e)
#6 testing::Test::Run() ??:0 (exe+0x0000000fad43)
#7 testing::TestInfo::Run() ??:0 (exe+0x0000000fe5fd)
#8 testing::TestCase::Run() ??:0 (exe+0x000000100658)
#9 testing::internal::UnitTestImpl::RunAllTests() ??:0 (exe+0x000000118a8a)
#10 bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) ??:0 (exe+0x000000192a92)
#11 bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) ??:0 (exe+0x00000015662e)
#12 testing::UnitTest::Run() ??:0 (exe+0x000000117922)
#13 main ??:0 (exe+0x0000001d54be)
Thread T1 (tid=22553, running) created by main thread at:
#0 pthread_create /home/builder/rogue_nightly_build/build_utils/llvm/llvm/projects/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc:812 (exe+0x0000000506c7)
#1 NDNotification::UpdateSubscriber(RRBaseObject*) /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/UnitTests/UT_NDEventManager.cxx:126 (exe+0x00000009cbd0)
#2 non-virtual thunk to NDNotification::UpdateSubscriber(RRBaseObject*) /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/UnitTests/UT_NDEventManager.cxx:158 (exe+0x00000009dfe7)
#3 RRPublisher::Notify(RRBaseObject*) /home/builder/rogue_nightly_build/working_copy/Shared/Code/trunk/RRPublisher.cxx:176 (exe+0x0000000c3841)
#4 NDEventManager::EventTimerCallback(ev::timer&, int) /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/NIRSDaemon/NDEventManager.cxx:459 (exe+0x0000000a9aff)
#5 void ev::base<ev_timer, ev::timer>::method_thunk<NDEventManager, &NDEventManager::EventTimerCallback>(ev_loop*, ev_timer*, int) /home/builder/rogue_nightly_build/scratch/ubuntu-utests-nirs-TSan-x86_64-clang-Debug-bin/externalProjects/Install/LibEv/include/ev++.h:480 (exe+0x0000000b4f89)
#6 ev_invoke_pending ??:0 (libev.so.4+0x000000017900)
#7 ev_run ??:0 (libev.so.4+0x00000001a9e4)
#8 ev::loop_ref::run(int) /home/builder/rogue_nightly_build/scratch/ubuntu-utests-nirs-TSan-x86_64-clang-Debug-bin/externalProjects/Install/LibEv/include/ev++.h:212 (exe+0x0000000ab046)
#9 NDEventManager::Run() /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/NIRSDaemon/NDEventManager.cxx:73 (exe+0x0000000a3634)
#10 NDEventManager_TestEventTypeAsync_Test::TestBody() /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/UnitTests/UT_NDEventManager.cxx:200 (exe+0x00000008bf2c)
#11 void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) ??:0 (exe+0x0000001a6a82)
#12 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) ??:0 (exe+0x00000014b51e)
#13 testing::Test::Run() ??:0 (exe+0x0000000fad43)
#14 testing::TestInfo::Run() ??:0 (exe+0x0000000fe5fd)
#15 testing::TestCase::Run() ??:0 (exe+0x000000100658)
#16 testing::internal::UnitTestImpl::RunAllTests() ??:0 (exe+0x000000118a8a)
#17 bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) ??:0 (exe+0x000000192a92)
#18 bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) ??:0 (exe+0x00000015662e)
#19 testing::UnitTest::Run() ??:0 (exe+0x000000117922)
#20 main ??:0 (exe+0x0000001d54be)
SUMMARY: ThreadSanitizer: data race ev.c:0 evpipe_write
==================
==================
WARNING: ThreadSanitizer: data race (pid=22551)
Write of size 4 at 0x7f1bb4ba4c38 by main thread:
#0 pipecb ev.c:0 (libev.so.4+0x0000000483cd)
#1 ev_invoke_pending ??:0 (libev.so.4+0x000000017900)
#2 ev_run ??:0 (libev.so.4+0x00000001a9e4)
#3 ev::loop_ref::run(int) /home/builder/rogue_nightly_build/scratch/ubuntu-utests-nirs-TSan-x86_64-clang-Debug-bin/externalProjects/Install/LibEv/include/ev++.h:212 (exe+0x0000000ab046)
#4 NDEventManager::Run() /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/NIRSDaemon/NDEventManager.cxx:73 (exe+0x0000000a3634)
#5 NDEventManager_TestEventTypeAsync_Test::TestBody() /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/UnitTests/UT_NDEventManager.cxx:200 (exe+0x00000008bf2c)
#6 void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) ??:0 (exe+0x0000001a6a82)
#7 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) ??:0 (exe+0x00000014b51e)
#8 testing::Test::Run() ??:0 (exe+0x0000000fad43)
#9 testing::TestInfo::Run() ??:0 (exe+0x0000000fe5fd)
#10 testing::TestCase::Run() ??:0 (exe+0x000000100658)
#11 testing::internal::UnitTestImpl::RunAllTests() ??:0 (exe+0x000000118a8a)
#12 bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) ??:0 (exe+0x000000192a92)
#13 bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) ??:0 (exe+0x00000015662e)
#14 testing::UnitTest::Run() ??:0 (exe+0x000000117922)
#15 main ??:0 (exe+0x0000001d54be)
Previous read of size 4 at 0x7f1bb4ba4c38 by thread T1:
#0 evpipe_write ev.c:0 (libev.so.4+0x000000005b48)
#1 ev_async_send ??:0 (libev.so.4+0x00000003ed68)
#2 ev::async::send() /home/builder/rogue_nightly_build/scratch/ubuntu-utests-nirs-TSan-x86_64-clang-Debug-bin/externalProjects/Install/LibEv/include/ev++.h:799 (exe+0x0000000ace06)
#3 NDEventManager::SetAsyncEventWatcher(RRBaseObject*) /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/NIRSDaemon/NDEventManager.cxx:505 (exe+0x0000000aa7bf)
#4 NDNotification::RunNotificationThread() /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/UnitTests/UT_NDEventManager.cxx:76 (exe+0x00000009e8b6)
#5 NDNotification::NotificationThread(void*) /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/UnitTests/UT_NDEventManager.cxx:62 (exe+0x00000009e4ae)
Thread T1 (tid=22553, running) created by main thread at:
#0 pthread_create /home/builder/rogue_nightly_build/build_utils/llvm/llvm/projects/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc:812 (exe+0x0000000506c7)
#1 NDNotification::UpdateSubscriber(RRBaseObject*) /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/UnitTests/UT_NDEventManager.cxx:126 (exe+0x00000009cbd0)
#2 non-virtual thunk to NDNotification::UpdateSubscriber(RRBaseObject*) /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/UnitTests/UT_NDEventManager.cxx:158 (exe+0x00000009dfe7)
#3 RRPublisher::Notify(RRBaseObject*) /home/builder/rogue_nightly_build/working_copy/Shared/Code/trunk/RRPublisher.cxx:176 (exe+0x0000000c3841)
#4 NDEventManager::EventTimerCallback(ev::timer&, int) /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/NIRSDaemon/NDEventManager.cxx:459 (exe+0x0000000a9aff)
#5 void ev::base<ev_timer, ev::timer>::method_thunk<NDEventManager, &NDEventManager::EventTimerCallback>(ev_loop*, ev_timer*, int) /home/builder/rogue_nightly_build/scratch/ubuntu-utests-nirs-TSan-x86_64-clang-Debug-bin/externalProjects/Install/LibEv/include/ev++.h:480 (exe+0x0000000b4f89)
#6 ev_invoke_pending ??:0 (libev.so.4+0x000000017900)
#7 ev_run ??:0 (libev.so.4+0x00000001a9e4)
#8 ev::loop_ref::run(int) /home/builder/rogue_nightly_build/scratch/ubuntu-utests-nirs-TSan-x86_64-clang-Debug-bin/externalProjects/Install/LibEv/include/ev++.h:212 (exe+0x0000000ab046)
#9 NDEventManager::Run() /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/NIRSDaemon/NDEventManager.cxx:73 (exe+0x0000000a3634)
#10 NDEventManager_TestEventTypeAsync_Test::TestBody() /home/builder/rogue_nightly_build/working_copy/NIRS/trunk/Code/Embedded/UnitTests/UT_NDEventManager.cxx:200 (exe+0x00000008bf2c)
#11 void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) ??:0 (exe+0x0000001a6a82)
#12 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) ??:0 (exe+0x00000014b51e)
#13 testing::Test::Run() ??:0 (exe+0x0000000fad43)
#14 testing::TestInfo::Run() ??:0 (exe+0x0000000fe5fd)
#15 testing::TestCase::Run() ??:0 (exe+0x000000100658)
#16 testing::internal::UnitTestImpl::RunAllTests() ??:0 (exe+0x000000118a8a)
#17 bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) ??:0 (exe+0x000000192a92)
#18 bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) ??:0 (exe+0x00000015662e)
#19 testing::UnitTest::Run() ??:0 (exe+0x000000117922)
#20 main ??:0 (exe+0x0000001d54be)
SUMMARY: ThreadSanitizer: data race ev.c:0 pipecb
==================
Let's me know if you will be interested in a example to reproduce the warning?
Best Regards,
-KA
More information about the libev
mailing list