Status: Unconfirmed
Owner: ----
Labels: Type-Bug Pri-2 OS-All Area-Misc

New issue 21474 by timurrrr: Data races in third_party/libevent
http://code.google.com/p/chromium/issues/detail?id=21474

Chrome Version       : r25599

I'm running chromium unittests under ThreadSanitizer
(http://code.google.com/p/data-race-test/wiki/ThreadSanitizer) and recently
I've noticed a bunch of new data race reports from third_party/libevent.

Some examples:
WARNING: Possible data race during read of size 2 at 0x92383C6: {{{
    T0 (locks held: {}):
     #0  event_del third_party/libevent/event.c:792
     #1
base::MessagePumpLibevent::FileDescriptorWatcher::StopWatchingFileDescriptor()
base/message_pump_libevent.cc:78
     #2  net::(anonymous namespace)::GConfSettingGetterImplKDE::Shutdown()
net/proxy/proxy_config_service_linux.cc:462
     #3  net::ProxyConfigServiceLinux::Delegate::Reset()
net/proxy/proxy_config_service_linux.cc:1046
     #4  net::ProxyConfigServiceLinux::Reset()
net/proxy/proxy_config_service_linux.h:218
     #5  SynchConfigGetter::SetupAndInitialFetch()
net/proxy/proxy_config_service_linux_unittest.cc:263
     #6  net::ProxyConfigServiceLinuxTest_KDEConfigParser_Test::TestBody()
net/proxy/proxy_config_service_linux_unittest.cc:1204
   Concurrent write(s) happened at (OR AFTER) these points:
    T47 (locks held: {}):
     #0  event_process_active third_party/libevent/event.c:383
     #1  event_base_loop third_party/libevent/event.c:522
     #2  base::MessagePumpLibevent::Run(base::MessagePump::Delegate*)
base/message_pump_libevent.cc:245
     ...
   Location 0x92383C6 is 38 bytes inside a block starting at 0x92383A0 of
size 72 allocated by T0 from heap:
     #0  malloc
/usr/local/google/users/timurrrr/chr_bb/slave/sub-dbg-linux-tsan/build/src/tools/valgrind/valgrind-10771/tsan/ts_valgrind_intercepts.c:318
     #1  operator new(unsigned int) /usr/lib32/libstdc++.so.6.0.9
     #2  base::MessagePumpLibevent::WatchFileDescriptor(int, bool,
base::MessagePumpLibevent::Mode,
base::MessagePumpLibevent::FileDescriptorWatcher*,
base::MessagePumpLibevent::Watcher*) base/message_pump_libevent.cc:173
     #3  MessageLoopForIO::WatchFileDescriptor(int, bool,
MessageLoopForIO::Mode, base::MessagePumpLibevent::FileDescriptorWatcher*,
base::MessagePumpLibevent::Watcher*) base/message_loop.cc:628
     #4  net::(anonymous
namespace)::GConfSettingGetterImplKDE::SetupNotification(net::ProxyConfigServiceLinux::Delegate*)
net/proxy/proxy_config_service_linux.cc:481
     #5
net::ProxyConfigServiceLinux::Delegate::SetupAndFetchInitialConfig(MessageLoop*,
MessageLoop*, MessageLoopForIO*)  
net/proxy/proxy_config_service_linux.cc:1009
     #6
net::ProxyConfigServiceLinux::SetupAndFetchInitialConfig(MessageLoop*,
MessageLoop*, MessageLoopForIO*) net/proxy/proxy_config_service_linux.h:215
     #7  SynchConfigGetter::SetupAndInitialFetch()
net/proxy/proxy_config_service_linux_unittest.cc:267
     #8  net::ProxyConfigServiceLinuxTest_KDEConfigParser_Test::TestBody()
net/proxy/proxy_config_service_linux_unittest.cc:1204
}}}
WARNING: Possible data race during read of size 1 at 0x92383E4: {{{
    T0 (locks held: {}):
     #0  event_del third_party/libevent/event.c:797
     #1
base::MessagePumpLibevent::FileDescriptorWatcher::StopWatchingFileDescriptor()
base/message_pump_libevent.cc:78
     #2  net::(anonymous namespace)::GConfSettingGetterImplKDE::Shutdown()
net/proxy/proxy_config_service_linux.cc:462
     #3  net::ProxyConfigServiceLinux::Delegate::Reset()
net/proxy/proxy_config_service_linux.cc:1046
     #4  net::ProxyConfigServiceLinux::Reset()
net/proxy/proxy_config_service_linux.h:218
     #5  SynchConfigGetter::SetupAndInitialFetch()
net/proxy/proxy_config_service_linux_unittest.cc:263
     #6  net::ProxyConfigServiceLinuxTest_KDEConfigParser_Test::TestBody()
net/proxy/proxy_config_service_linux_unittest.cc:1204
   Concurrent write(s) happened at (OR AFTER) these points:
    T47 (locks held: {}):
     #0  event_queue_remove third_party/libevent/event.c:927
     #1  event_process_active third_party/libevent/event.c:375
     #2  event_base_loop third_party/libevent/event.c:522
     #3  base::MessagePumpLibevent::Run(base::MessagePump::Delegate*)
base/message_pump_libevent.cc:245
     ...
   Location 0x92383E4 is 68 bytes inside a block starting at 0x92383A0 of
size 72 allocated by T0 from heap:
     #0  malloc
/usr/local/google/users/timurrrr/chr_bb/slave/sub-dbg-linux-tsan/build/src/tools/valgrind/valgrind-10771/tsan/ts_valgrind_intercepts.c:318
     #1  operator new(unsigned int) /usr/lib32/libstdc++.so.6.0.9
     #2  base::MessagePumpLibevent::WatchFileDescriptor(int, bool,
base::MessagePumpLibevent::Mode,
base::MessagePumpLibevent::FileDescriptorWatcher*,
base::MessagePumpLibevent::Watcher*) base/message_pump_libevent.cc:173
     #3  MessageLoopForIO::WatchFileDescriptor(int, bool,
MessageLoopForIO::Mode, base::MessagePumpLibevent::FileDescriptorWatcher*,
base::MessagePumpLibevent::Watcher*) base/message_loop.cc:628
     #4  net::(anonymous
namespace)::GConfSettingGetterImplKDE::SetupNotification(net::ProxyConfigServiceLinux::Delegate*)
net/proxy/proxy_config_service_linux.cc:481
     #5
net::ProxyConfigServiceLinux::Delegate::SetupAndFetchInitialConfig(MessageLoop*,
MessageLoop*, MessageLoopForIO*)  
net/proxy/proxy_config_service_linux.cc:1009
     #6
net::ProxyConfigServiceLinux::SetupAndFetchInitialConfig(MessageLoop*,
MessageLoop*, MessageLoopForIO*) net/proxy/proxy_config_service_linux.h:215
     #7  SynchConfigGetter::SetupAndInitialFetch()
net/proxy/proxy_config_service_linux_unittest.cc:267
     #8  net::ProxyConfigServiceLinuxTest_KDEConfigParser_Test::TestBody()
net/proxy/proxy_config_service_linux_unittest.cc:1204
}}}
WARNING: Possible data race during write of size 4 at 0x91D7180: {{{
    T0 (locks held: {}):
     #0  epoll_del third_party/libevent/epoll.c:338
     #1  event_del third_party/libevent/event.c:805
     #2
base::MessagePumpLibevent::FileDescriptorWatcher::StopWatchingFileDescriptor()
base/message_pump_libevent.cc:78
     #3  net::(anonymous namespace)::GConfSettingGetterImplKDE::Shutdown()
net/proxy/proxy_config_service_linux.cc:462
     #4  net::ProxyConfigServiceLinux::Delegate::Reset()
net/proxy/proxy_config_service_linux.cc:1046
     #5  net::ProxyConfigServiceLinux::Reset()
net/proxy/proxy_config_service_linux.h:218
     #6  SynchConfigGetter::SetupAndInitialFetch()
net/proxy/proxy_config_service_linux_unittest.cc:263
     #7  net::ProxyConfigServiceLinuxTest_KDEConfigParser_Test::TestBody()
net/proxy/proxy_config_service_linux_unittest.cc:1204
   Concurrent read(s) happened at (OR AFTER) these points:
    T47 (locks held: {}):
     #0  epoll_dispatch third_party/libevent/epoll.c:228
     #1  event_base_loop third_party/libevent/event.c:513
     #2  base::MessagePumpLibevent::Run(base::MessagePump::Delegate*)
base/message_pump_libevent.cc:245
     ...
   Location 0x91D7180 is 200 bytes inside a block starting at 0x91D70B8 of
size 256 allocated by T47 from heap:
     #0  calloc
/usr/local/google/users/timurrrr/chr_bb/slave/sub-dbg-linux-tsan/build/src/tools/valgrind/valgrind-10771/tsan/ts_valgrind_intercepts.c:330
     #1  epoll_init third_party/libevent/epoll.c:141
     #2  event_base_new third_party/libevent/event.c:195
     #3  base::MessagePumpLibevent::MessagePumpLibevent()
base/message_pump_libevent.cc:102
     ...
}}}

As far as I can see, some counters are accessed without locks (or other
means of synchronization) from different threads.
Is there any data race here? Or maybe does ThreadSanitizer miss some other
means of synchronization (e.g. via file system) ?

These reports are from 'net_unittests --gtest_filter="*KDE*"'

Thank you,
Timur Iskhodzhanov


--
You received this message because you are listed in the owner
or CC fields of this issue, or because you starred this issue.
You may adjust your issue notification preferences at:
http://code.google.com/hosting/settings

--~--~---------~--~----~------------~-------~--~----~
Automated mail from issue updates at http://crbug.com/
Subscription options: http://groups.google.com/group/chromium-bugs
-~----------~----~----~----~------~----~------~--~---

Reply via email to