New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 673760 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
don't use this account. use chromiu...
Closed: Dec 2016
EstimatedDays: ----
NextAction: ----
OS: Linux
Pri: 1
Type: Bug

Blocking:
issue 672860



Sign in to add a comment

TSAN race in PlatformSensorAndProviderLinuxTest.SensorRemoved

Project Member Reported by gab@chromium.org, Dec 13 2016

Issue description

Culprit is clearly https://codereview.chromium.org/2533793002.

Please ack with fix or we will have to revert (there appears to be stacked 3CLs so that'd be sad...): https://chromium.googlesource.com/chromium/src/+log/master/device/generic_sensor/platform_sensor_and_provider_unittest_linux.cc


PlatformSensorAndProviderLinuxTest.SensorRemoved (run #1):
[ RUN      ] PlatformSensorAndProviderLinuxTest.SensorRemoved
==================
WARNING: ThreadSanitizer: data race (pid=11497)
  Write of size 1 at 0x7b1c000005d0 by main thread:
    #0 device::PollingSensorReader::StopFetchingData() device/generic_sensor/platform_sensor_reader_linux.cc:86:22 (device_unittests+0x0000008d5e9a)
    #1 device::PlatformSensorLinux::StopSensor() device/generic_sensor/platform_sensor_linux.cc:73:19 (device_unittests+0x0000008d5585)
    #2 device::PlatformSensor::UpdateSensorInternal(std::__1::map<device::PlatformSensor::Client*, std::__1::list<device::PlatformSensorConfiguration, std::__1::allocator<device::PlatformSensorConfiguration> >, std::__1::less<device::PlatformSensor::Client*>, std::__1::allocator<std::__1::pair<device::PlatformSensor::Client* const, std::__1::list<device::PlatformSensorConfiguration, std::__1::allocator<device::PlatformSensorConfiguration> > > > > const&) device/generic_sensor/platform_sensor.cc:131:5 (device_unittests+0x0000008cdfeb)
    #3 device::PlatformSensor::RemoveClient(device::PlatformSensor::Client*) device/generic_sensor/platform_sensor.cc:85:5 (device_unittests+0x0000008cd77e)
    #4 device::MockPlatformSensorClient::~MockPlatformSensorClient() device/generic_sensor/platform_sensor_and_provider_unittest_linux.cc:121:16 (device_unittests+0x000000550a11)
    #5 ~NiceMock testing/gmock/include/gmock/gmock-generated-nice-strict.h:169:3 (device_unittests+0x0000005506a7)
    #6 testing::NiceMock<device::MockPlatformSensorClient>::~NiceMock() testing/gmock/include/gmock/gmock-generated-nice-strict.h:166 (device_unittests+0x0000005506a7)
    #7 operator() buildtools/third_party/libc++/trunk/include/memory:2529:13 (device_unittests+0x00000053c531)
    #8 reset buildtools/third_party/libc++/trunk/include/memory:2735 (device_unittests+0x00000053c531)
    #9 ~unique_ptr buildtools/third_party/libc++/trunk/include/memory:2703 (device_unittests+0x00000053c531)
    #10 device::PlatformSensorAndProviderLinuxTest_SensorRemoved_Test::TestBody() device/generic_sensor/platform_sensor_and_provider_unittest_linux.cc:375 (device_unittests+0x00000053c531)
    #11 HandleExceptionsInMethodIfSupported<testing::Test, void> testing/gtest/src/gtest.cc:2458:12 (device_unittests+0x000000c23186)
    #12 testing::Test::Run() testing/gtest/src/gtest.cc:2474 (device_unittests+0x000000c23186)
    #13 testing::TestInfo::Run() testing/gtest/src/gtest.cc:2656:11 (device_unittests+0x000000c23cdc)
    #14 testing::TestCase::Run() testing/gtest/src/gtest.cc:2774:28 (device_unittests+0x000000c245b6)
    #15 testing::internal::UnitTestImpl::RunAllTests() testing/gtest/src/gtest.cc:4647:43 (device_unittests+0x000000c2f566)
    #16 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458:12 (device_unittests+0x000000c2edf9)
    #17 testing::UnitTest::Run() testing/gtest/src/gtest.cc:4255 (device_unittests+0x000000c2edf9)
    #18 RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237:46 (device_unittests+0x000000785ce9)
    #19 base::TestSuite::Run() base/test/test_suite.cc:271 (device_unittests+0x000000785ce9)
    #20 Invoke<base::TestSuite *> base/bind_internal.h:214:12 (device_unittests+0x0000005152e5)
    #21 MakeItSo<int (base::TestSuite::*const &)(), base::TestSuite *> base/bind_internal.h:285 (device_unittests+0x0000005152e5)
    #22 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:361 (device_unittests+0x0000005152e5)
    #23 base::internal::Invoker<base::internal::BindState<int (base::TestSuite::*)(), base::internal::UnretainedWrapper<base::TestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:339 (device_unittests+0x0000005152e5)
    #24 Run base/callback.h:85:12 (device_unittests+0x000000787393)
    #25 base::(anonymous namespace)::LaunchUnitTestsInternal(base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, int, int, bool, base::Callback<void (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:211 (device_unittests+0x000000787393)
    #26 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:453:10 (device_unittests+0x00000078721a)
    #27 main device/test/run_all_unittests.cc:28:10 (device_unittests+0x000000515236)

  Previous write of size 1 at 0x7b1c000005d0 by thread T2:
    #0 device::PollingSensorReader::StopFetchingData() device/generic_sensor/platform_sensor_reader_linux.cc:86:22 (device_unittests+0x0000008d5e9a)
    #1 device::PollingSensorReader::PollForData() device/generic_sensor/public/cpp/sensor_reading.h:24:20 (device_unittests+0x0000008d5fb8)
    #2 Invoke<device::PollingSensorReader *> base/bind_internal.h:214:12 (device_unittests+0x0000008d6595)
    #3 MakeItSo<void (device::PollingSensorReader::*const &)(), device::PollingSensorReader *> base/bind_internal.h:285 (device_unittests+0x0000008d6595)
    #4 RunImpl<void (device::PollingSensorReader::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<device::PollingSensorReader> > &, 0> base/bind_internal.h:361 (device_unittests+0x0000008d6595)
    #5 base::internal::Invoker<base::internal::BindState<void (device::PollingSensorReader::*)(), base::internal::UnretainedWrapper<device::PollingSensorReader> >, void ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:339 (device_unittests+0x0000008d6595)
    #6 Run base/callback.h:85:12 (device_unittests+0x000000d67783)
    #7 base::Timer::RunScheduledTask() base/timer/timer.cc:229 (device_unittests+0x000000d67783)
    #8 base::BaseTimerTaskInternal::Run() base/timer/timer.cc:53:12 (device_unittests+0x000000d6768d)
    #9 Invoke<base::BaseTimerTaskInternal *> base/bind_internal.h:214:12 (device_unittests+0x000000d678d5)
    #10 MakeItSo<void (base::BaseTimerTaskInternal::*const &)(), base::BaseTimerTaskInternal *> base/bind_internal.h:285 (device_unittests+0x000000d678d5)
    #11 RunImpl<void (base::BaseTimerTaskInternal::*const &)(), const std::__1::tuple<base::internal::OwnedWrapper<base::BaseTimerTaskInternal> > &, 0> base/bind_internal.h:361 (device_unittests+0x000000d678d5)
    #12 base::internal::Invoker<base::internal::BindState<void (base::BaseTimerTaskInternal::*)(), base::internal::OwnedWrapper<base::BaseTimerTaskInternal> >, void ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:339 (device_unittests+0x000000d678d5)
    #13 Run base/callback.h:68:12 (device_unittests+0x000000d9052c)
    #14 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:52 (device_unittests+0x000000d9052c)
    #15 base::MessageLoop::RunTask(base::PendingTask*) base/message_loop/message_loop.cc:413:19 (device_unittests+0x000000d1fb32)
    #16 base::MessageLoop::DeferOrRunPendingTask(base::PendingTask) base/message_loop/message_loop.cc:422:5 (device_unittests+0x000000d200ed)
    #17 base::MessageLoop::DoDelayedWork(base::TimeTicks*) base/message_loop/message_loop.cc:554:10 (device_unittests+0x000000d20bd8)
    #18 base::MessagePumpLibevent::Run(base::MessagePump::Delegate*) base/message_loop/message_pump_libevent.cc:228:27 (device_unittests+0x000000d25343)
    #19 base::MessageLoop::RunHandler() base/message_loop/message_loop.cc:378:10 (device_unittests+0x000000d1f65b)
    #20 base::RunLoop::Run() base/run_loop.cc:37:10 (device_unittests+0x000000d3c7e9)
    #21 base::Thread::Run(base::RunLoop*) base/threading/thread.cc:245:13 (device_unittests+0x000000d61e49)
    #22 base::Thread::ThreadMain() base/threading/thread.cc:328:3 (device_unittests+0x000000d62054)
    #23 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (device_unittests+0x000000d5b66d)

  Location is heap block of size 112 at 0x7b1c000005b0 allocated by main thread:
    #0 operator new(unsigned long) <null> (device_unittests+0x0000004c30d2)
    #1 MakeUnique<device::PollingSensorReader, const device::SensorInfoLinux *&, device::PlatformSensorLinux *&, scoped_refptr<base::SingleThreadTaskRunner> &> base/memory/ptr_util.h:56:29 (device_unittests+0x0000008d623c)
    #2 device::SensorReader::Create(device::SensorInfoLinux const*, device::PlatformSensorLinux*, scoped_refptr<base::SingleThreadTaskRunner>) device/generic_sensor/platform_sensor_reader_linux.cc:141 (device_unittests+0x0000008d623c)
    #3 device::PlatformSensorLinux::PlatformSensorLinux(device::mojom::SensorType, std::__1::unique_ptr<void, mojo::internal::Unmapper>, device::PlatformSensorProvider*, device::SensorInfoLinux const*, scoped_refptr<base::SingleThreadTaskRunner>) device/generic_sensor/platform_sensor_linux.cc:34:7 (device_unittests+0x0000008d5134)
    #4 device::PlatformSensorProviderLinux::CreateSensorAndNotify(device::mojom::SensorType, device::SensorInfoLinux*) device/generic_sensor/platform_sensor_provider_linux.cc:174:13 (device_unittests+0x0000008d3df5)
    #5 device::PlatformSensorProviderLinux::ProcessStoredRequests() device/generic_sensor/platform_sensor_provider_linux.cc:162:5 (device_unittests+0x0000008d3c07)
    #6 OnSensorNodesEnumerated device/generic_sensor/platform_sensor_provider_linux.cc:184:3 (device_unittests+0x0000008d3ec7)
    #7 non-virtual thunk to device::PlatformSensorProviderLinux::OnSensorNodesEnumerated() device/generic_sensor/platform_sensor_provider_linux.cc (device_unittests+0x0000008d3ec7)
    #8 Invoke<device::SensorDeviceManager::Delegate *> base/bind_internal.h:214:12 (device_unittests+0x000000544d25)
    #9 MakeItSo<void (device::SensorDeviceManager::Delegate::*const &)(), device::SensorDeviceManager::Delegate *> base/bind_internal.h:285 (device_unittests+0x000000544d25)
    #10 RunImpl<void (device::SensorDeviceManager::Delegate::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<device::SensorDeviceManager::Delegate> > &, 0> base/bind_internal.h:361 (device_unittests+0x000000544d25)
    #11 base::internal::Invoker<base::internal::BindState<void (device::SensorDeviceManager::Delegate::*)(), base::internal::UnretainedWrapper<device::SensorDeviceManager::Delegate> >, void ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:339 (device_unittests+0x000000544d25)
    #12 Run base/callback.h:68:12 (device_unittests+0x000000d9052c)
    #13 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:52 (device_unittests+0x000000d9052c)
    #14 base::MessageLoop::RunTask(base::PendingTask*) base/message_loop/message_loop.cc:413:19 (device_unittests+0x000000d1fb32)
    #15 base::MessageLoop::DeferOrRunPendingTask(base::PendingTask) base/message_loop/message_loop.cc:422:5 (device_unittests+0x000000d200ed)
    #16 base::MessageLoop::DoWork() base/message_loop/message_loop.cc:515:13 (device_unittests+0x000000d208b4)
    #17 base::MessagePumpDefault::Run(base::MessagePump::Delegate*) base/message_loop/message_pump_default.cc:33:31 (device_unittests+0x000000d24051)
    #18 base::MessageLoop::RunHandler() base/message_loop/message_loop.cc:378:10 (device_unittests+0x000000d1f65b)
    #19 base::RunLoop::Run() base/run_loop.cc:37:10 (device_unittests+0x000000d3c7e9)
    #20 device::PlatformSensorAndProviderLinuxTest::CreateSensor(device::mojom::SensorType) device/generic_sensor/platform_sensor_and_provider_unittest_linux.cc:171:16 (device_unittests+0x00000053a9a7)
    #21 device::PlatformSensorAndProviderLinuxTest_SensorRemoved_Test::TestBody() device/generic_sensor/platform_sensor_and_provider_unittest_linux.cc:367:17 (device_unittests+0x00000053c264)
    #22 HandleExceptionsInMethodIfSupported<testing::Test, void> testing/gtest/src/gtest.cc:2458:12 (device_unittests+0x000000c23186)
    #23 testing::Test::Run() testing/gtest/src/gtest.cc:2474 (device_unittests+0x000000c23186)
    #24 testing::TestInfo::Run() testing/gtest/src/gtest.cc:2656:11 (device_unittests+0x000000c23cdc)
    #25 testing::TestCase::Run() testing/gtest/src/gtest.cc:2774:28 (device_unittests+0x000000c245b6)
    #26 testing::internal::UnitTestImpl::RunAllTests() testing/gtest/src/gtest.cc:4647:43 (device_unittests+0x000000c2f566)
    #27 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458:12 (device_unittests+0x000000c2edf9)
    #28 testing::UnitTest::Run() testing/gtest/src/gtest.cc:4255 (device_unittests+0x000000c2edf9)
    #29 RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237:46 (device_unittests+0x000000785ce9)
    #30 base::TestSuite::Run() base/test/test_suite.cc:271 (device_unittests+0x000000785ce9)
    #31 Invoke<base::TestSuite *> base/bind_internal.h:214:12 (device_unittests+0x0000005152e5)
    #32 MakeItSo<int (base::TestSuite::*const &)(), base::TestSuite *> base/bind_internal.h:285 (device_unittests+0x0000005152e5)
    #33 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:361 (device_unittests+0x0000005152e5)
    #34 base::internal::Invoker<base::internal::BindState<int (base::TestSuite::*)(), base::internal::UnretainedWrapper<base::TestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:339 (device_unittests+0x0000005152e5)
    #35 Run base/callback.h:85:12 (device_unittests+0x000000787393)
    #36 base::(anonymous namespace)::LaunchUnitTestsInternal(base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, int, int, bool, base::Callback<void (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:211 (device_unittests+0x000000787393)
    #37 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:453:10 (device_unittests+0x00000078721a)
    #38 main device/test/run_all_unittests.cc:28:10 (device_unittests+0x000000515236)

  Thread T2 'Sensor polling thread' (tid=11551, running) created by main thread at:
    #0 pthread_create <null> (device_unittests+0x000000464885)
    #1 base::(anonymous namespace)::CreateThread(unsigned long, bool, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:110:13 (device_unittests+0x000000d5b337)
    #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:191:10 (device_unittests+0x000000d5b235)
    #3 base::Thread::StartWithOptions(base::Thread::Options const&) base/threading/thread.cc:112:15 (device_unittests+0x000000d61ae5)
    #4 device::PlatformSensorProviderLinux::StartPollingThread() device/generic_sensor/platform_sensor_provider_linux.cc:100:29 (device_unittests+0x0000008d3470)
    #5 device::PlatformSensorProviderLinux::CreateSensorAndNotify(device::mojom::SensorType, device::SensorInfoLinux*) device/generic_sensor/platform_sensor_provider_linux.cc:172:35 (device_unittests+0x0000008d3cad)
    #6 device::PlatformSensorProviderLinux::ProcessStoredRequests() device/generic_sensor/platform_sensor_provider_linux.cc:162:5 (device_unittests+0x0000008d3c07)
    #7 OnSensorNodesEnumerated device/generic_sensor/platform_sensor_provider_linux.cc:184:3 (device_unittests+0x0000008d3ec7)
    #8 non-virtual thunk to device::PlatformSensorProviderLinux::OnSensorNodesEnumerated() device/generic_sensor/platform_sensor_provider_linux.cc (device_unittests+0x0000008d3ec7)
    #9 Invoke<device::SensorDeviceManager::Delegate *> base/bind_internal.h:214:12 (device_unittests+0x000000544d25)
    #10 MakeItSo<void (device::SensorDeviceManager::Delegate::*const &)(), device::SensorDeviceManager::Delegate *> base/bind_internal.h:285 (device_unittests+0x000000544d25)
    #11 RunImpl<void (device::SensorDeviceManager::Delegate::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<device::SensorDeviceManager::Delegate> > &, 0> base/bind_internal.h:361 (device_unittests+0x000000544d25)
    #12 base::internal::Invoker<base::internal::BindState<void (device::SensorDeviceManager::Delegate::*)(), base::internal::UnretainedWrapper<device::SensorDeviceManager::Delegate> >, void ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:339 (device_unittests+0x000000544d25)
    #13 Run base/callback.h:68:12 (device_unittests+0x000000d9052c)
    #14 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:52 (device_unittests+0x000000d9052c)
    #15 base::MessageLoop::RunTask(base::PendingTask*) base/message_loop/message_loop.cc:413:19 (device_unittests+0x000000d1fb32)
    #16 base::MessageLoop::DeferOrRunPendingTask(base::PendingTask) base/message_loop/message_loop.cc:422:5 (device_unittests+0x000000d200ed)
    #17 base::MessageLoop::DoWork() base/message_loop/message_loop.cc:515:13 (device_unittests+0x000000d208b4)
    #18 base::MessagePumpDefault::Run(base::MessagePump::Delegate*) base/message_loop/message_pump_default.cc:33:31 (device_unittests+0x000000d24051)
    #19 base::MessageLoop::RunHandler() base/message_loop/message_loop.cc:378:10 (device_unittests+0x000000d1f65b)
    #20 base::RunLoop::Run() base/run_loop.cc:37:10 (device_unittests+0x000000d3c7e9)
    #21 device::PlatformSensorAndProviderLinuxTest::CreateSensor(device::mojom::SensorType) device/generic_sensor/platform_sensor_and_provider_unittest_linux.cc:171:16 (device_unittests+0x00000053a9a7)
    #22 device::PlatformSensorAndProviderLinuxTest_SensorRemoved_Test::TestBody() device/generic_sensor/platform_sensor_and_provider_unittest_linux.cc:367:17 (device_unittests+0x00000053c264)
    #23 HandleExceptionsInMethodIfSupported<testing::Test, void> testing/gtest/src/gtest.cc:2458:12 (device_unittests+0x000000c23186)
    #24 testing::Test::Run() testing/gtest/src/gtest.cc:2474 (device_unittests+0x000000c23186)
    #25 testing::TestInfo::Run() testing/gtest/src/gtest.cc:2656:11 (device_unittests+0x000000c23cdc)
    #26 testing::TestCase::Run() testing/gtest/src/gtest.cc:2774:28 (device_unittests+0x000000c245b6)
    #27 testing::internal::UnitTestImpl::RunAllTests() testing/gtest/src/gtest.cc:4647:43 (device_unittests+0x000000c2f566)
    #28 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458:12 (device_unittests+0x000000c2edf9)
    #29 testing::UnitTest::Run() testing/gtest/src/gtest.cc:4255 (device_unittests+0x000000c2edf9)
    #30 RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237:46 (device_unittests+0x000000785ce9)
    #31 base::TestSuite::Run() base/test/test_suite.cc:271 (device_unittests+0x000000785ce9)
    #32 Invoke<base::TestSuite *> base/bind_internal.h:214:12 (device_unittests+0x0000005152e5)
    #33 MakeItSo<int (base::TestSuite::*const &)(), base::TestSuite *> base/bind_internal.h:285 (device_unittests+0x0000005152e5)
    #34 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:361 (device_unittests+0x0000005152e5)
    #35 base::internal::Invoker<base::internal::BindState<int (base::TestSuite::*)(), base::internal::UnretainedWrapper<base::TestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:339 (device_unittests+0x0000005152e5)
    #36 Run base/callback.h:85:12 (device_unittests+0x000000787393)
    #37 base::(anonymous namespace)::LaunchUnitTestsInternal(base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, int, int, bool, base::Callback<void (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:211 (device_unittests+0x000000787393)
    #38 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:453:10 (device_unittests+0x00000078721a)
    #39 main device/test/run_all_unittests.cc:28:10 (device_unittests+0x000000515236)

SUMMARY: ThreadSanitizer: data race device/generic_sensor/platform_sensor_reader_linux.cc:86:22 in device::PollingSensorReader::StopFetchingData()

 
Status: Started (was: Assigned)
Thanks. Starting investigation.
Hi again,

A CL that fixes the problem is uploaded - https://codereview.chromium.org/2569763004/
Project Member

Comment 3 by bugdroid1@chromium.org, Dec 15 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/42c45b9a36514f64662c6fc6b15bb8506d0c06cc

commit 42c45b9a36514f64662c6fc6b15bb8506d0c06cc
Author: gab <gab@chromium.org>
Date: Thu Dec 15 13:36:30 2016

Temporarily suppress PollingSensorReader race to get bot green.

Suppression to be reverted in https://codereview.chromium.org/2569763004/.

TBR=haraken@chromium.org
BUG= 673760 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_chromium_tsan_rel_ng

Review-Url: https://codereview.chromium.org/2579003002
Cr-Commit-Position: refs/heads/master@{#438819}

[modify] https://crrev.com/42c45b9a36514f64662c6fc6b15bb8506d0c06cc/build/sanitizers/tsan_suppressions.cc

Project Member

Comment 4 by bugdroid1@chromium.org, Dec 20 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/d52b2f15ba4712b9dc4a2d08a45aa3210999dc8f

commit d52b2f15ba4712b9dc4a2d08a45aa3210999dc8f
Author: maksim.sisov <maksim.sisov@intel.com>
Date: Tue Dec 20 14:37:53 2016

[sensors](Linux) Fix tsan data race in sensor reader

This CL fixes a tsan data race, which is caused by calling StopFetchingData
from different threads. It must not be allowed. Use the same thread by using
a PostTask.

BUG= 673760 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_chromium_tsan_rel_ng

Review-Url: https://codereview.chromium.org/2569763004
Cr-Commit-Position: refs/heads/master@{#439798}

[modify] https://crrev.com/d52b2f15ba4712b9dc4a2d08a45aa3210999dc8f/build/sanitizers/tsan_suppressions.cc
[modify] https://crrev.com/d52b2f15ba4712b9dc4a2d08a45aa3210999dc8f/device/generic_sensor/platform_sensor_linux.cc
[modify] https://crrev.com/d52b2f15ba4712b9dc4a2d08a45aa3210999dc8f/device/generic_sensor/platform_sensor_linux.h
[modify] https://crrev.com/d52b2f15ba4712b9dc4a2d08a45aa3210999dc8f/device/generic_sensor/platform_sensor_provider_linux.cc
[modify] https://crrev.com/d52b2f15ba4712b9dc4a2d08a45aa3210999dc8f/device/generic_sensor/platform_sensor_provider_linux.h
[modify] https://crrev.com/d52b2f15ba4712b9dc4a2d08a45aa3210999dc8f/device/generic_sensor/platform_sensor_reader_linux.cc
[modify] https://crrev.com/d52b2f15ba4712b9dc4a2d08a45aa3210999dc8f/device/generic_sensor/platform_sensor_reader_linux.h

Comment 5 by gab@chromium.org, Dec 20 2016

Status: Fixed (was: Started)
Thanks!

Sign in to add a comment