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