openh264 icon indicating copy to clipboard operation
openh264 copied to clipboard

Various thread sanitizer issues

Open jrmuizel opened this issue 3 years ago • 4 comments

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

jrmuizel avatar Aug 30 '22 21:08 jrmuizel

Is there any issues now? The logs are out of date.

huili2 avatar Nov 30 '22 07:11 huili2

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

jrmuizel avatar Nov 30 '22 14:11 jrmuizel

"The logs for this run have expired and are no longer available."

Could you attach a log here please?

mcatanzaro avatar Mar 28 '23 18:03 mcatanzaro

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)

jrmuizel avatar May 05 '23 14:05 jrmuizel