clang thread sanitizer reported a data race in App::Start()
synchro.was_stop_signal was read without locking ================== WARNING: ThreadSanitizer: data race (pid=13831) Write of size 1 at 0x000000dc4d18 by thread T1 (mutexes: write M44): #0 Winix::App::SpecialThreadForSignals(void*) /disk2Tc/home/tomek/roboczy/prog/winix/winixd/core/app.cpp:2226:31 (winix.so+0x1f7465) Previous read of size 1 at 0x000000dc4d18 by main thread: #0 Winix::App::Start() /disk2Tc/home/tomek/roboczy/prog/winix/winixd/core/app.cpp:651:18 (winix.so+0x1ee9af) #1 main /disk2Tc/home/tomek/roboczy/prog/winix/winixd/main/main.cpp:222:6 (winix+0x2d74c1) Location is global 'Winix::app' of size 65840 at 0x000000db5908 (winix+0x000000dc4d18) Mutex M44 (0x000000dc4d10) created at: #0 pthread_mutex_lock /disk2Tb/usr/src/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc:4153:3 (winix+0x2ac204) #1 Winix::Synchro::Lock() /disk2Tc/home/tomek/roboczy/prog/winix/winixd/core/synchro.cpp:68:12 (winix.so+0x2e5822) #2 Winix::Lock::Lock(Winix::Synchro*) /disk2Tc/home/tomek/roboczy/prog/winix/winixd/core/lock.cpp:53:11 (winix.so+0x295522) #3 Winix::FileLog::get_local_date(PT::Date const&) /disk2Tc/home/tomek/roboczy/prog/winix/winixd/core/filelog.cpp:98:8 (winix.so+0x261183) #4 Winix::Log::PrintDate(PT::Date const&) /disk2Tc/home/tomek/roboczy/prog/winix/winixd/core/log.cpp:80:30 (winix.so+0x295a21) #5 Winix::LogInfo(Winix::Log&, Winix::LogManipulators, char const*, bool, char const*) /disk2Tc/home/tomek/roboczy/prog/winix/winixd/main/main.cpp:104:6 (winix+0x2d69ec) #6 main /disk2Tc/home/tomek/roboczy/prog/winix/winixd/main/main.cpp:190:2 (winix+0x2d7363) Thread T1 (tid=100187, running) created by main thread at: #0 pthread_create /disk2Tb/usr/src/contrib/llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:962:3 (winix+0x295bb3) #1 Winix::App::StartThreads() /disk2Tc/home/tomek/roboczy/prog/winix/winixd/core/app.cpp:2246:2 (winix.so+0x1f7549) #2 main /disk2Tc/home/tomek/roboczy/prog/winix/winixd/main/main.cpp:212:6 (winix+0x2d743e) SUMMARY: ThreadSanitizer: data race /disk2Tc/home/tomek/roboczy/prog/winix/winixd/core/app.cpp:2226:31 in Winix::App::SpecialThreadForSignals(void*) ==================
This commit is contained in:
parent
35e10ed469
commit
486067a4b2
|
@ -648,20 +648,26 @@ void App::ClearAfterRequest()
|
||||||
|
|
||||||
void App::Start()
|
void App::Start()
|
||||||
{
|
{
|
||||||
while( !synchro.was_stop_signal && FCGX_Accept_r(&fcgi_request) == 0 )
|
bool was_stop_signal = false;
|
||||||
|
|
||||||
{
|
{
|
||||||
Lock();
|
Winix::Lock lock(synchro);
|
||||||
|
was_stop_signal = synchro.was_stop_signal;
|
||||||
|
}
|
||||||
|
|
||||||
|
while( !was_stop_signal && FCGX_Accept_r(&fcgi_request) == 0 )
|
||||||
|
{
|
||||||
|
Winix::Lock lock(synchro);
|
||||||
|
|
||||||
if( synchro.was_stop_signal )
|
if( synchro.was_stop_signal )
|
||||||
{
|
{
|
||||||
|
was_stop_signal = true;
|
||||||
FCGX_Finish_r(&fcgi_request);
|
FCGX_Finish_r(&fcgi_request);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ProcessRequest();
|
ProcessRequest();
|
||||||
}
|
}
|
||||||
|
|
||||||
Unlock();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue