Various thread sanitizer issues
I was looking at getting thread sanitizer running in CI but it looks like there are a number of problems: https://github.com/jrmuizel/openh264/runs/8101544482?check_suite_focus=true
Is there any issues now? The logs are out of date.
Yes, I don't think anything has been fixed since I made the initial push. I've retriggered it: https://github.com/jrmuizel/openh264/actions/runs/3584007800/jobs/6030129529
"The logs for this run have expired and are no longer available."
Could you attach a log here please?
Here's an excerpt from the beginning of the log:
WARNING: ThreadSanitizer: data race (pid=3186)
Write of size 1 at 0x7b4800000670 by thread T21 (mutexes: write M935):
#0 WelsCommon::CWelsThread::TheThread(void*) <null> (codec_unittest+0x4aa6ff)
Previous read of size 1 at 0x7b4800000670 by main thread (mutexes: write M833, write M937):
#0 WelsCommon::CWelsThread::Start() <null> (codec_unittest+0x4aa5d1)
#1 WelsCommon::CWelsThreadPool::Init() <null> (codec_unittest+0x4abff2)
#2 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf3f)
#3 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#4 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#5 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#6 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#7 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#8 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#9 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#10 CSliceBufferReallocatTest::InitParamForSizeLimitSlcModeCase(int) <null> (codec_unittest+0x1e3102)
#11 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#12 testing::Test::Run() <null> (codec_unittest+0x320e27)
#13 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#14 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#15 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#16 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#17 main <null> (codec_unittest+0xaf9d2)
Location is heap block of size 344 at 0x7b4800000600 allocated by main thread:
#0 operator new(unsigned long) ../../../../src/libsanitizer/tsan/tsan_new_delete.cpp:64 (libtsan.so.0+0x8f162)
#1 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf69)
#2 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#3 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#4 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#5 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#6 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#7 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#8 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#9 CSliceBufferReallocatTest::InitParamForSizeLimitSlcModeCase(int) <null> (codec_unittest+0x1e3102)
#10 CSliceBufferReallocatTest_Reallocate_in_one_thread_Test::TestBody() <null> (codec_unittest+0x1e3d3b)
#11 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#12 testing::Test::Run() <null> (codec_unittest+0x320e27)
#13 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#14 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#15 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#16 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#17 main <null> (codec_unittest+0xaf9d2)
Mutex M935 (0x7b4800000648) created at:
#0 pthread_mutex_init ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1227 (libtsan.so.0+0x4bee1)
#1 WelsMutexInit <null> (codec_unittest+0x4aaa31)
#2 WelsCommon::CWelsThread::CWelsThread() <null> (codec_unittest+0x4aa880)
#3 WelsCommon::CWelsThreadPool::CWelsThreadPool() <null> (codec_unittest+0x4ab2d6)
#4 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf74)
#5 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#6 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#7 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#8 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#9 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#10 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#11 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#12 CSliceBufferReallocatTest::InitParamForSizeLimitSlcModeCase(int) <null> (codec_unittest+0x1e3102)
#13 CSliceBufferReallocatTest_Reallocate_in_one_thread_Test::TestBody() <null> (codec_unittest+0x1e3d3b)
#14 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#15 testing::Test::Run() <null> (codec_unittest+0x320e27)
#16 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#17 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#18 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#19 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#20 main <null> (codec_unittest+0xaf9d2)
Mutex M833 (0x7b0c00008168) created at:
#0 pthread_mutex_init ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1227 (libtsan.so.0+0x4bee1)
#1 WelsMutexInit <null> (codec_unittest+0x4aaa31)
#2 WelsCommon::CWelsThreadPool::SetThreadNum(int) <null> (codec_unittest+0x4ab586)
#3 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac0d)
#4 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#5 EncoderTaskManagement_CWelsTaskManageBase_Test::TestBody() <null> (codec_unittest+0x14a953)
#6 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#7 testing::Test::Run() <null> (codec_unittest+0x320e27)
#8 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#9 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#10 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#11 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#12 main <null> (codec_unittest+0xaf9d2)
Mutex M937 (0x7b48000006a0) created at:
#0 pthread_mutex_init ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1227 (libtsan.so.0+0x4bee1)
#1 WelsMutexInit <null> (codec_unittest+0x4aaa31)
#2 WelsCommon::CWelsThreadPool::CWelsThreadPool() <null> (codec_unittest+0x4ab386)
#3 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf74)
#4 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#5 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#6 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#7 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#8 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#9 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#10 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#11 CSliceBufferReallocatTest::InitParamForSizeLimitSlcModeCase(int) <null> (codec_unittest+0x1e3102)
#12 CSliceBufferReallocatTest_Reallocate_in_one_thread_Test::TestBody() <null> (codec_unittest+0x1e3d3b)
#13 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#14 testing::Test::Run() <null> (codec_unittest+0x320e27)
#15 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#16 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#17 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#18 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#19 main <null> (codec_unittest+0xaf9d2)
Thread T21 (tid=3258, running) created by main thread at:
#0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:969 (libtsan.so.0+0x605b8)
#1 WelsThreadCreate <null> (codec_unittest+0x4aac25)
#2 WelsCommon::CWelsThread::Start() <null> (codec_unittest+0x4aa5b5)
#3 WelsCommon::CWelsThreadPool::Init() <null> (codec_unittest+0x4abff2)
#4 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf3f)
#5 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#6 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#7 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#8 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#9 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#10 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#11 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#12 CSliceBufferReallocatTest::InitParamForSizeLimitSlcModeCase(int) <null> (codec_unittest+0x1e3102)
#13 CSliceBufferReallocatTest_Reallocate_in_one_thread_Test::TestBody() <null> (codec_unittest+0x1e3d3b)
#14 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#15 testing::Test::Run() <null> (codec_unittest+0x320e27)
#16 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#17 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#18 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#19 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#20 main <null> (codec_unittest+0xaf9d2)
SUMMARY: ThreadSanitizer: data race (/home/runner/work/openh264/openh264/codec_unittest+0x4aa6ff) in WelsCommon::CWelsThread::TheThread(void*)
==================
[ OK ] CSliceBufferReallocatTest.Reallocate_in_one_thread (70 ms)
[ RUN ] CSliceBufferReallocatTest.ExtendLayerBufferTest
==================
WARNING: ThreadSanitizer: data race (pid=3186)
Write of size 1 at 0x7b48000001f0 by thread T5 (mutexes: write M965):
#0 WelsCommon::CWelsThread::TheThread(void*) <null> (codec_unittest+0x4aa6ff)
Previous read of size 1 at 0x7b48000001f0 by main thread (mutexes: write M833, write M967):
#0 WelsCommon::CWelsThread::Start() <null> (codec_unittest+0x4aa5d1)
#1 WelsCommon::CWelsThreadPool::Init() <null> (codec_unittest+0x4abff2)
#2 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf3f)
#3 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#4 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#5 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#6 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#7 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#8 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#9 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#10 CSliceBufferReallocatTest::InitParamForSizeLimitSlcModeCase(int) <null> (codec_unittest+0x1e3102)
#11 CSliceBufferReallocatTest_ExtendLayerBufferTest_Test::TestBody() <null> (codec_unittest+0x1e46b4)
#12 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#13 testing::Test::Run() <null> (codec_unittest+0x320e27)
#14 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#15 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#16 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#17 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#18 main <null> (codec_unittest+0xaf9d2)
Location is heap block of size 344 at 0x7b4800000180 allocated by main thread:
#0 operator new(unsigned long) ../../../../src/libsanitizer/tsan/tsan_new_delete.cpp:64 (libtsan.so.0+0x8f162)
#1 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf69)
#2 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#3 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#4 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#5 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#6 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#7 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#8 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#9 CSliceBufferReallocatTest::InitParamForSizeLimitSlcModeCase(int) <null> (codec_unittest+0x1e3102)
#10 CSliceBufferReallocatTest_ExtendLayerBufferTest_Test::TestBody() <null> (codec_unittest+0x1e46b4)
#11 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#12 testing::Test::Run() <null> (codec_unittest+0x320e27)
#13 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#14 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#15 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#16 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#17 main <null> (codec_unittest+0xaf9d2)
Mutex M965 (0x7b48000001c8) created at:
#0 pthread_mutex_init ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1227 (libtsan.so.0+0x4bee1)
#1 WelsMutexInit <null> (codec_unittest+0x4aaa31)
#2 WelsCommon::CWelsThread::CWelsThread() <null> (codec_unittest+0x4aa880)
#3 WelsCommon::CWelsThreadPool::CWelsThreadPool() <null> (codec_unittest+0x4ab2d6)
#4 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf74)
#5 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#6 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#7 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#8 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#9 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#10 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#11 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#12 CSliceBufferReallocatTest::InitParamForSizeLimitSlcModeCase(int) <null> (codec_unittest+0x1e3102)
#13 CSliceBufferReallocatTest_ExtendLayerBufferTest_Test::TestBody() <null> (codec_unittest+0x1e46b4)
#14 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#15 testing::Test::Run() <null> (codec_unittest+0x320e27)
#16 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#17 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#18 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#19 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#20 main <null> (codec_unittest+0xaf9d2)
Mutex M833 (0x7b0c00008168) created at:
#0 pthread_mutex_init ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1227 (libtsan.so.0+0x4bee1)
#1 WelsMutexInit <null> (codec_unittest+0x4aaa31)
#2 WelsCommon::CWelsThreadPool::SetThreadNum(int) <null> (codec_unittest+0x4ab586)
#3 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac0d)
#4 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#5 EncoderTaskManagement_CWelsTaskManageBase_Test::TestBody() <null> (codec_unittest+0x14a953)
#6 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#7 testing::Test::Run() <null> (codec_unittest+0x320e27)
#8 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#9 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#10 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#11 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#12 main <null> (codec_unittest+0xaf9d2)
Mutex M967 (0x7b4800000220) created at:
#0 pthread_mutex_init ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1227 (libtsan.so.0+0x4bee1)
#1 WelsMutexInit <null> (codec_unittest+0x4aaa31)
#2 WelsCommon::CWelsThreadPool::CWelsThreadPool() <null> (codec_unittest+0x4ab386)
#3 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf74)
#4 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#5 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#6 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#7 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#8 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#9 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#10 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#11 CSliceBufferReallocatTest::InitParamForSizeLimitSlcModeCase(int) <null> (codec_unittest+0x1e3102)
#12 CSliceBufferReallocatTest_ExtendLayerBufferTest_Test::TestBody() <null> (codec_unittest+0x1e46b4)
#13 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#14 testing::Test::Run() <null> (codec_unittest+0x320e27)
#15 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#16 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#17 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#18 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#19 main <null> (codec_unittest+0xaf9d2)
Thread T5 (tid=3261, running) created by main thread at:
#0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:969 (libtsan.so.0+0x605b8)
#1 WelsThreadCreate <null> (codec_unittest+0x4aac25)
#2 WelsCommon::CWelsThread::Start() <null> (codec_unittest+0x4aa5b5)
#3 WelsCommon::CWelsThreadPool::Init() <null> (codec_unittest+0x4abff2)
#4 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf3f)
#5 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#6 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#7 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#8 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#9 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#10 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#11 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#12 CSliceBufferReallocatTest::InitParamForSizeLimitSlcModeCase(int) <null> (codec_unittest+0x1e3102)
#13 CSliceBufferReallocatTest_ExtendLayerBufferTest_Test::TestBody() <null> (codec_unittest+0x1e46b4)
#14 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#15 testing::Test::Run() <null> (codec_unittest+0x320e27)
#16 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#17 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#18 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#19 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#20 main <null> (codec_unittest+0xaf9d2)
SUMMARY: ThreadSanitizer: data race (/home/runner/work/openh264/openh264/codec_unittest+0x4aa6ff) in WelsCommon::CWelsThread::TheThread(void*)
==================
[ OK ] CSliceBufferReallocatTest.ExtendLayerBufferTest (621 ms)
[ RUN ] CSliceBufferReallocatTest.FrameBsReallocateTest
==================
WARNING: ThreadSanitizer: data race (pid=3186)
Write of size 1 at 0x7b4800000070 by thread T8 (mutexes: write M987):
#0 WelsCommon::CWelsThread::TheThread(void*) <null> (codec_unittest+0x4aa6ff)
Previous read of size 1 at 0x7b4800000070 by main thread (mutexes: write M833, write M989):
#0 WelsCommon::CWelsThread::Start() <null> (codec_unittest+0x4aa5d1)
#1 WelsCommon::CWelsThreadPool::Init() <null> (codec_unittest+0x4abff2)
#2 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf3f)
#3 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#4 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#5 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#6 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#7 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#8 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#9 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#10 CSliceBufferReallocatTest::InitParamForTestCase(int) <null> (codec_unittest+0x1e2e64)
#11 CSliceBufferReallocatTest_FrameBsReallocateTest_Test::TestBody() <null> (codec_unittest+0x1e5613)
#12 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#13 testing::Test::Run() <null> (codec_unittest+0x320e27)
#14 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#15 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#16 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#17 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#18 main <null> (codec_unittest+0xaf9d2)
Location is heap block of size 344 at 0x7b4800000000 allocated by main thread:
#0 operator new(unsigned long) ../../../../src/libsanitizer/tsan/tsan_new_delete.cpp:64 (libtsan.so.0+0x8f162)
#1 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf69)
#2 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#3 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#4 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#5 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#6 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#7 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#8 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#9 CSliceBufferReallocatTest::InitParamForTestCase(int) <null> (codec_unittest+0x1e2e64)
#10 CSliceBufferReallocatTest_FrameBsReallocateTest_Test::TestBody() <null> (codec_unittest+0x1e5613)
#11 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#12 testing::Test::Run() <null> (codec_unittest+0x320e27)
#13 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#14 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#15 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#16 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#17 main <null> (codec_unittest+0xaf9d2)
Mutex M987 (0x7b4800000048) created at:
#0 pthread_mutex_init ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1227 (libtsan.so.0+0x4bee1)
#1 WelsMutexInit <null> (codec_unittest+0x4aaa31)
#2 WelsCommon::CWelsThread::CWelsThread() <null> (codec_unittest+0x4aa880)
#3 WelsCommon::CWelsThreadPool::CWelsThreadPool() <null> (codec_unittest+0x4ab2d6)
#4 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf74)
#5 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#6 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#7 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#8 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#9 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#10 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#11 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#12 CSliceBufferReallocatTest::InitParamForTestCase(int) <null> (codec_unittest+0x1e2e64)
#13 CSliceBufferReallocatTest_FrameBsReallocateTest_Test::TestBody() <null> (codec_unittest+0x1e5613)
#14 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#15 testing::Test::Run() <null> (codec_unittest+0x320e27)
#16 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#17 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#18 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#19 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#20 main <null> (codec_unittest+0xaf9d2)
Mutex M833 (0x7b0c00008168) created at:
#0 pthread_mutex_init ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1227 (libtsan.so.0+0x4bee1)
#1 WelsMutexInit <null> (codec_unittest+0x4aaa31)
#2 WelsCommon::CWelsThreadPool::SetThreadNum(int) <null> (codec_unittest+0x4ab586)
#3 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac0d)
#4 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#5 EncoderTaskManagement_CWelsTaskManageBase_Test::TestBody() <null> (codec_unittest+0x14a953)
#6 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#7 testing::Test::Run() <null> (codec_unittest+0x320e27)
#8 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#9 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#10 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#11 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#12 main <null> (codec_unittest+0xaf9d2)
Mutex M989 (0x7b48000000a0) created at:
#0 pthread_mutex_init ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1227 (libtsan.so.0+0x4bee1)
#1 WelsMutexInit <null> (codec_unittest+0x4aaa31)
#2 WelsCommon::CWelsThreadPool::CWelsThreadPool() <null> (codec_unittest+0x4ab386)
#3 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf74)
#4 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#5 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#6 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#7 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#8 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#9 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#10 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#11 CSliceBufferReallocatTest::InitParamForTestCase(int) <null> (codec_unittest+0x1e2e64)
#12 CSliceBufferReallocatTest_FrameBsReallocateTest_Test::TestBody() <null> (codec_unittest+0x1e5613)
#13 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#14 testing::Test::Run() <null> (codec_unittest+0x320e27)
#15 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#16 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#17 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#18 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#19 main <null> (codec_unittest+0xaf9d2)
Thread T8 (tid=3264, running) created by main thread at:
#0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:969 (libtsan.so.0+0x605b8)
#1 WelsThreadCreate <null> (codec_unittest+0x4aac25)
#2 WelsCommon::CWelsThread::Start() <null> (codec_unittest+0x4aa5b5)
#3 WelsCommon::CWelsThreadPool::Init() <null> (codec_unittest+0x4abff2)
#4 WelsCommon::CWelsThreadPool::AddReference() <null> (codec_unittest+0x4adf3f)
#5 WelsEnc::CWelsTaskManageBase::Init(WelsEnc::TagWelsEncCtx*) <null> (codec_unittest+0x46ac15)
#6 WelsEnc::IWelsTaskManage::CreateTaskManage(WelsEnc::TagWelsEncCtx*, int, bool) <null> (codec_unittest+0x46c0d0)
#7 WelsEnc::RequestMtResource(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, int, int, bool) <null> (codec_unittest+0x42fca5)
#8 WelsEnc::RequestMemorySvc(WelsEnc::TagWelsEncCtx**, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x4008cf)
#9 WelsEnc::WelsInitEncoderExt(WelsEnc::TagWelsEncCtx**, WelsEnc::TagWelsSvcCodingParam*, TagLogContext*, WelsEnc::TagExistingParasetList*) <null> (codec_unittest+0x40460a)
#10 WelsEnc::CWelsH264SVCEncoder::InitializeInternal(WelsEnc::TagWelsSvcCodingParam*) <null> (codec_unittest+0x46e257)
#11 WelsEnc::CWelsH264SVCEncoder::InitializeExt(TagEncParamExt const*) <null> (codec_unittest+0x46f461)
#12 CSliceBufferReallocatTest::InitParamForTestCase(int) <null> (codec_unittest+0x1e2e64)
#13 CSliceBufferReallocatTest_FrameBsReallocateTest_Test::TestBody() <null> (codec_unittest+0x1e5613)
#14 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (codec_unittest+0x33492c)
#15 testing::Test::Run() <null> (codec_unittest+0x320e27)
#16 testing::TestInfo::Run() <null> (codec_unittest+0x320ff8)
#17 testing::TestCase::Run() <null> (codec_unittest+0x321219)
#18 testing::internal::UnitTestImpl::RunAllTests() <null> (codec_unittest+0x3217e8)
#19 testing::UnitTest::Run() <null> (codec_unittest+0x321ca1)
#20 main <null> (codec_unittest+0xaf9d2)