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


_______________________________________________
libev mailing list
libev@lists.schmorp.de
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev

Reply via email to