Haivision / srt

Secure, Reliable, Transport
https://www.srtalliance.org
Mozilla Public License 2.0
3.07k stars 839 forks source link

[BUG] TSAN Lock Inversion #2833

Open jlsantiago0 opened 9 months ago

jlsantiago0 commented 9 months ago

Describe the bug Clang TSAN build of SRT Listener

To Reproduce Configured with PKTINFO and BONDING enabled.

Expected behavior No potential lock inversions.

Screenshots Will attach TSAN log.

Desktop (please provide the following information):

Additional context

Mutex M0 = m_ConnectionLock
Mutex M1 = uglobal().m_GlobControlLock

T17:
T17 Thread Created:
    #4 srt::CRcvQueue::init(int, unsigned long, int, int, srt::CChannel*, srt::sync::CTimer*) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/queue.cpp:1199:10 (hvmaf_hviorouter+0x19a6a79)
    #5 srt::CUDTUnited::updateMux(srt::CUDTSocket*, srt::sockaddr_any const&, int const*) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/api.cpp:3160:24 (hvmaf_hviorouter+0x18bf63d)
    #6 srt::CUDTUnited::bind(srt::CUDTSocket*, srt::sockaddr_any const&) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/api.cpp:932:5 (hvmaf_hviorouter+0x18beac7)
    #7 srt::CUDT::bind(int, sockaddr const*, int) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/api.cpp:3522:26 (hvmaf_hviorouter+0x18ccc9e)
    #8 srt_bind /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/srt_c_api.cpp:112:79 (hvmaf_hviorouter+0x19bc55f)
Aquires Lock M0 via:
    #3 srt::CUDT::acceptAndRespond(srt::sockaddr_any const&, srt::sockaddr_any const&, srt::CPacket const&, srt::CHandShake&) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/core.cpp:5665:16 (hvmaf_hviorouter+0x191b5ed)
    #4 srt::CUDTUnited::newConnection(int, srt::sockaddr_any const&, srt::CPacket const&, srt::CHandShake&, int&, srt::CUDT*&) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/api.cpp:631:20 (hvmaf_hviorouter+0x18bbd84)
    #5 srt::CUDT::processConnectRequest(srt::sockaddr_any const&, srt::CPacket&) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/core.cpp:11068:32 (hvmaf_hviorouter+0x193357b)
    #6 srt::CRcvQueue::worker_ProcessConnectionRequest(srt::CUnit*, srt::sockaddr_any const&) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/queue.cpp:1411:41 (hvmaf_hviorouter+0x19a7d99)
    #7 srt::CRcvQueue::worker(void*) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/queue.cpp:1247:29 (hvmaf_hviorouter+0x19a6e4e)
While Holding M1:
    #3 srt::CUDT::acceptAndRespond(srt::sockaddr_any const&, srt::sockaddr_any const&, srt::CPacket const&, srt::CHandShake&) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/core.cpp:5768:20 (hvmaf_hviorouter+0x191b943)
    #4 srt::CUDTUnited::newConnection(int, srt::sockaddr_any const&, srt::CPacket const&, srt::CHandShake&, int&, srt::CUDT*&) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/api.cpp:631:20 (hvmaf_hviorouter+0x18bbd84)
    #5 srt::CUDT::processConnectRequest(srt::sockaddr_any const&, srt::CPacket&) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/core.cpp:11068:32 (hvmaf_hviorouter+0x193357b)
    #6 srt::CRcvQueue::worker_ProcessConnectionRequest(srt::CUnit*, srt::sockaddr_any const&) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/queue.cpp:1411:41 (hvmaf_hviorouter+0x19a7d99)
    #7 srt::CRcvQueue::worker(void*) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/queue.cpp:1247:29 (hvmaf_hviorouter+0x19a6e4e)

T15:
T15 Thread Created:
    #4 srt::CUDTUnited::startup() /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/api.cpp:266:10 (hvmaf_hviorouter+0x18ba3b8)
    #5 srt::CUDT::socket() /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/api.cpp:3368:19 (hvmaf_hviorouter+0x18cc23a)
    #6 srt_create_socket /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/srt_c_api.cpp:37:40 (hvmaf_hviorouter+0x19bc0db)
Aquries M1 via:
    #3 srt::CUDTUnited::checkBrokenSockets() /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/api.cpp:2568:16 (hvmaf_hviorouter+0x18c9e7f)
    #4 srt::CUDTUnited::garbageCollect(void*) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/api.cpp:3284:15 (hvmaf_hviorouter+0x18ba511)
While Holding M0 via:
    #3 srt::CUDT::closeInternal() /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/core.cpp:6191:16 (hvmaf_hviorouter+0x191c8f4)
    #4 srt::CUDTUnited::removeSocket(int) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/api.cpp:2786:15 (hvmaf_hviorouter+0x18cb7e8)
    #5 srt::CUDTUnited::checkBrokenSockets() /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/api.cpp:2702:9 (hvmaf_hviorouter+0x18cb110)
    #6 srt::CUDTUnited::garbageCollect(void*) /mnt/jlsws2/dev/orthrus/master/src/vendor/utils/haisrt/srt-1.5.3/srtcore/api.cpp:3284:15 (hvmaf_hviorouter+0x18ba511)

tsan.log

jlsantiago0 commented 9 months ago

tsan.log