apache / apache/trafficserver

TSan: data race in `Histogram::operator()`

Open
#11,641 1 comment 0 reactions 0 assignees View on GitHub
Bug Event System Metrics Stale TSan
Dominant language
C++
Stars
2k
Forks
874
Avg merge
6d 15h
Merged PRs (30d)
46

Description

```
WARNING: ThreadSanitizer: data race (pid=9915)
Write of size 8 at 0xffff937ffd70 by thread T2 (mutexes: write M0):
#0 ts::Histogram<7, 2>::operator()(unsigned long) /trafficserver/include/tsutil/Histogram.h:163 (traffic_server+0x9f8674) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#1 EThread::Metrics::record_loop_time(long) (traffic_server+0xed3824) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#2 EThread::execute_regular() /trafficserver/src/iocore/eventsystem/UnixEThread.cc:310 (traffic_server+0xed2580) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#3 EThread::execute() /trafficserver/src/iocore/eventsystem/UnixEThread.cc:350 (traffic_server+0xed2780) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#4 spawn_thread_internal /trafficserver/src/iocore/eventsystem/Thread.cc:75 (traffic_server+0xed0220) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#5 (libtsan.so.2+0x555e4) (BuildId: 4fc6d4b1d08e85e4139b0e07fb335a013192e924)

Previous read of size 8 at 0xffff937ffd70 by thread T5 (mutexes: write M1, write M2, write M3):
#0 ts::Histogram<7, 2>::operator+=(ts::Histogram<7, 2> const&) /trafficserver/include/tsutil/Histogram.h:136 (traffic_server+0xed4394) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#1 EThread::Metrics::summarize(EThread::Metrics&) /trafficserver/src/iocore/eventsystem/UnixEThread.cc:405 (traffic_server+0xed2b8c) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#2 EventMetricStatSync /trafficserver/src/iocore/eventsystem/UnixEventProcessor.cc:95 (traffic_server+0xed5bac) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#3 RecExecRawStatSyncCbs() /trafficserver/src/records/RecRawStats.cc:386 (traffic_server+0xeba044) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#4 raw_stat_sync_cont::exec_callbacks(int, Event*) /trafficserver/src/iocore/eventsystem/RecProcess.cc:91 (traffic_server+0xedcd0c) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#5 Continuation::handleEvent(int, void*) /trafficserver/include/iocore/eventsystem/Continuation.h:228 (traffic_server+0x8e5740) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#6 EThread::process_event(Event*, int) /trafficserver/src/iocore/eventsystem/UnixEThread.cc:163 (traffic_server+0xed1a70) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#7 EThread::execute_regular() /trafficserver/src/iocore/eventsystem/UnixEThread.cc:270 (traffic_server+0xed2294) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#8 EThread::execute() /trafficserver/src/iocore/eventsystem/UnixEThread.cc:350 (traffic_server+0xed2780) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#9 spawn_thread_internal /trafficserver/src/iocore/eventsystem/Thread.cc:75 (traffic_server+0xed0220) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#10 (libtsan.so.2+0x555e4) (BuildId: 4fc6d4b1d08e85e4139b0e07fb335a013192e924)

Location is heap block of size 1101696 at 0xffff936f3000 allocated by main thread:
#0 operator new(unsigned long) (libtsan.so.2+0xa7418) (BuildId: 4fc6d4b1d08e85e4139b0e07fb335a013192e924)
#1 EventProcessor::spawn_event_threads(int, int, unsigned long) /trafficserver/src/iocore/eventsystem/UnixEventProcessor.cc:451 (traffic_server+0xed7b7c) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#2 EventProcessor::start(int, unsigned long) /trafficserver/src/iocore/eventsystem/UnixEventProcessor.cc:550 (traffic_server+0xed84f0) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#3 main /trafficserver/src/traffic_server/traffic_server.cc:2110 (traffic_server+0x8fc9ac) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)

Mutex M0 (0xffff937f3bd0) created at:
#0 pthread_mutex_init (libtsan.so.2+0x5f218) (BuildId: 4fc6d4b1d08e85e4139b0e07fb335a013192e924)
#1 ink_mutex_init(pthread_mutex_t*) /trafficserver/src/tscore/ink_mutex.cc:54 (traffic_server+0x93aa0c) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#2 ProtectedQueue::ProtectedQueue() /trafficserver/src/iocore/dns/../eventsystem/P_ProtectedQueue.h:38 (traffic_server+0xc2bbd4) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#3 EThread::EThread(ThreadType, int) /trafficserver/src/iocore/eventsystem/UnixEThread.cc:89 (traffic_server+0xed0cc0) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#4 EventProcessor::spawn_event_threads(int, int, unsigned long) /trafficserver/src/iocore/eventsystem/UnixEventProcessor.cc:451 (traffic_server+0xed7bbc) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#5 EventProcessor::start(int, unsigned long) /trafficserver/src/iocore/eventsystem/UnixEventProcessor.cc:550 (traffic_server+0xed84f0) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#6 main /trafficserver/src/traffic_server/traffic_server.cc:2110 (traffic_server+0x8fc9ac) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)

Mutex M1 (0xffff932c7bd0) created at:
#0 pthread_mutex_init (libtsan.so.2+0x5f218) (BuildId: 4fc6d4b1d08e85e4139b0e07fb335a013192e924)
#1 ink_mutex_init(pthread_mutex_t*) /trafficserver/src/tscore/ink_mutex.cc:54 (traffic_server+0x93aa0c) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#2 ProtectedQueue::ProtectedQueue() /trafficserver/src/iocore/dns/../eventsystem/P_ProtectedQueue.h:38 (traffic_server+0xc2bbd4) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#3 EThread::EThread(ThreadType, int) /trafficserver/src/iocore/eventsystem/UnixEThread.cc:89 (traffic_server+0xed0cc0) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#4 EventProcessor::spawn_event_threads(int, int, unsigned long) /trafficserver/src/iocore/eventsystem/UnixEventProcessor.cc:451 (traffic_server+0xed7bbc) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#5 TasksProcessor::start(int, unsigned long) /trafficserver/src/iocore/eventsystem/Tasks.cc:42 (traffic_server+0xecfa08) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#6 main /trafficserver/src/traffic_server/traffic_server.cc:2155 (traffic_server+0x8fcca0) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)

Mutex M2 (0xffff97803790) created at:
#0 pthread_mutex_init (libtsan.so.2+0x5f218) (BuildId: 4fc6d4b1d08e85e4139b0e07fb335a013192e924)
#1 ink_mutex_init(pthread_mutex_t*) /trafficserver/src/tscore/ink_mutex.cc:54 (traffic_server+0x93aa0c) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#2 ProxyMutex::init() /trafficserver/include/iocore/eventsystem/Lock.h:245 (traffic_server+0x8e4df4) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#3 new_ProxyMutex() /trafficserver/include/iocore/eventsystem/Lock.h:677 (traffic_server+0x8e5490) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#4 RecProcessStart() /trafficserver/src/iocore/eventsystem/RecProcess.cc:183 (traffic_server+0xedc684) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#5 main /trafficserver/src/traffic_server/traffic_server.cc:2157 (traffic_server+0x8fcca4) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)

Mutex M3 (0xffff9b243570) created at:
#0 pthread_mutex_init (libtsan.so.2+0x5f218) (BuildId: 4fc6d4b1d08e85e4139b0e07fb335a013192e924)
#1 ink_mutex_init(pthread_mutex_t*) /trafficserver/src/tscore/ink_mutex.cc:54 (traffic_server+0x93aa0c) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#2 rec_mutex_init(RecMutex*, char const*) /trafficserver/src/records/RecMutex.cc:32 (traffic_server+0xeaf0b4) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#3 RecRecordInit(RecRecord*) /trafficserver/src/records/RecUtils.cc:39 (traffic_server+0xeaf490) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#4 RecAlloc(RecT, char const*, RecDataT) /trafficserver/src/records/RecUtils.cc:62 (traffic_server+0xeaf700) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#5 register_record /trafficserver/src/records/RecCore.cc:95 (traffic_server+0xe961c4) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#6 RecRegisterStat(RecT, char const*, RecDataT, RecData, RecPersistT) /trafficserver/src/records/RecCore.cc:720 (traffic_server+0xe98a64) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#7 _RecRegisterRawStat(RecRawStatBlock*, RecT, char const*, RecDataT, RecPersistT, int, int (*)(char const*, RecDataT, RecData*, RecRawStatBlock*, int)) /trafficserver/src/records/RecRawStats.cc:64 (traffic_server+0xeb8174) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#8 EventProcessor::start(int, unsigned long) /trafficserver/src/iocore/eventsystem/UnixEventProcessor.cc:544 (traffic_server+0xed84a8) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#9 main /trafficserver/src/traffic_server/traffic_server.cc:2110 (traffic_server+0x8fc9ac) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)

Thread T2 '[ET_NET 0]' (tid=9922, running) created by main thread at:
#0 pthread_create (libtsan.so.2+0x6073c) (BuildId: 4fc6d4b1d08e85e4139b0e07fb335a013192e924)
#1 ink_thread_create /trafficserver/include/tscore/ink_thread.h:129 (traffic_server+0xecfdb4) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#2 Thread::start(char const*, void*, unsigned long, std::function const&) /trafficserver/src/iocore/eventsystem/Thread.cc:92 (traffic_server+0xed0354) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#3 EventProcessor::spawn_event_threads(int, int, unsigned long) /trafficserver/src/iocore/eventsystem/UnixEventProcessor.cc:469 (traffic_server+0xed7e70) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#4 EventProcessor::start(int, unsigned long) /trafficserver/src/iocore/eventsystem/UnixEventProcessor.cc:550 (traffic_server+0xed84f0) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#5 main /trafficserver/src/traffic_server/traffic_server.cc:2110 (traffic_server+0x8fc9ac) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)

Thread T5 '[ET_TASK 1]' (tid=9925, running) created by main thread at:
#0 pthread_create (libtsan.so.2+0x6073c) (BuildId: 4fc6d4b1d08e85e4139b0e07fb335a013192e924)
#1 ink_thread_create /trafficserver/include/tscore/ink_thread.h:129 (traffic_server+0xecfdb4) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#2 Thread::start(char const*, void*, unsigned long, std::function const&) /trafficserver/src/iocore/eventsystem/Thread.cc:92 (traffic_server+0xed0354) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#3 EventProcessor::spawn_event_threads(int, int, unsigned long) /trafficserver/src/iocore/eventsystem/UnixEventProcessor.cc:469 (traffic_server+0xed7e70) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#4 TasksProcessor::start(int, unsigned long) /trafficserver/src/iocore/eventsystem/Tasks.cc:42 (traffic_server+0xecfa08) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)
#5 main /trafficserver/src/traffic_server/traffic_server.cc:2155 (traffic_server+0x8fcca0) (BuildId: 7206bc40bbaaebae6ec8626a5203b22a73f3cecf)

```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.