Repository navigation
[sanitizer] TSan weekly run failure (fp 65304097123c) #6156
Copy link
Copy link
Closed
Labels
SmartLinkSmartLink WAN remote connectionSmartLink WAN remote connectionbugSomething isn't workingSomething isn't workingmaintainer-reviewRequires maintainer review before any action is takenRequires maintainer review before any action is takenpriority: highHigh priorityHigh prioritysanitizertsan
Description
Run: https://github.com/aethersdr/AetherSDR/actions/runs/37208806037
Commit: bdd9ae8
Date: 2026-10-04
Fingerprint: 65304097123c
Sanitizer report (first SUMMARY block)
98% tests passed, 11 tests failed out of 656
The following tests FAILED:
9 - audio_engine_rates_test (Timeout)
40 - receive_intent_routing_test (Failed)
64 - wdsp_channel_test (Failed)
81 - anan_rxdsp_handedness_test (Failed)
110 - spectrum_sequence_gap_test (Failed)
121 - wdsp_process_tally_test (Failed)
230 - weather_radar_loading_test (Timeout)
382 - peripheral_auth_dialog_test (Timeout)
472 - tci_automation_test (Failed)
473 - tci_server_review_test (Failed)
566 - tx_operation_integration_test (Failed)
Errors while running CTest
#16 QSslConfigurationPrivate::QSslConfigurationPrivate() /tmp/qtbase-src/src/network/ssl/qsslconfiguration_p.h:64 (libQt6Network.so.6+0x2678ab) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#17 QSslSocketPrivate::QSslSocketPrivate() /tmp/qtbase-src/src/network/ssl/qsslsocket.cpp:1993 (libQt6Network.so.6+0x2678ab)
#18 QSslSocket::QSslSocket(QObject*) /tmp/qtbase-src/src/network/ssl/qsslsocket.cpp:400 (libQt6Network.so.6+0x267f0c) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#19 AetherSDR::WanConnection::WanConnection(QObject*) /__w/AetherSDR/AetherSDR/src/core/backends/flex/WanConnection.cpp:113 (libaethercore.so+0x6e76f7) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#20 wanFallback /__w/AetherSDR/AetherSDR/tests/receive_intent_routing_test.cpp:338 (receive_intent_routing_test+0x12312) (BuildId: 7aa3dff1e7243749534f8159ec62963df80fcd6c)
#21 main /__w/AetherSDR/AetherSDR/tests/receive_intent_routing_test.cpp:433 (receive_intent_routing_test+0x9bb9) (BuildId: 7aa3dff1e7243749534f8159ec62963df80fcd6c)
Mutex M0 previously acquired by the same thread here:
#0 __tsan_mutex_post_lock ../../../../src/libsanitizer/tsan/tsan_interface_ann.cpp:377 (libtsan.so.2+0x8dc5f) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 QtTsan::mutexPostLock(void*, unsigned int, int) /tmp/qtbase-src/src/corelib/thread/qtsan_impl.h:56 (libQt6Network.so.6+0x26aedd) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#2 QBasicMutex::lock() /tmp/qtbase-src/src/corelib/thread/qmutex.h:47 (libQt6Network.so.6+0x26aedd)
#3 QMutexLocker<QMutex>::QMutexLocker(QMutex*) /tmp/qtbase-src/src/corelib/thread/qmutex.h:256 (libQt6Network.so.6+0x260cad) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#4 QSslSocketPrivate::tlsBackendInUse() /tmp/qtbase-src/src/network/ssl/qsslsocket.cpp:3110 (libQt6Network.so.6+0x260cad)
#5 QSslSocketPrivate::supportsSsl() /tmp/qtbase-src/src/network/ssl/qsslsocket.cpp:2025 (libQt6Network.so.6+0x2611f0) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#6 QSslSocketPrivate::ensureInitialized() /tmp/qtbase-src/src/network/ssl/qsslsocket.cpp:2038 (libQt6Network.so.6+0x262af8) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#7 QSslCertificatePrivate::QSslCertificatePrivate() /tmp/qtbase-src/src/network/ssl/qsslcertificate.cpp:126 (libQt6Network.so.6+0x13da01) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#8 QSslCertificate::QSslCertificate(QByteArray const&, QSsl::EncodingFormat) /tmp/qtbase-src/src/network/ssl/qsslcertificate.cpp:177 (libQt6Network.so.6+0x13dcd7) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#9 QSslConfigurationPrivate::QSslConfigurationPrivate() /tmp/qtbase-src/src/network/ssl/qsslconfiguration_p.h:64 (libQt6Network.so.6+0x2678ab) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#10 QSslSocketPrivate::QSslSocketPrivate() /tmp/qtbase-src/src/network/ssl/qsslsocket.cpp:1993 (libQt6Network.so.6+0x2678ab)
#11 QSslSocket::QSslSocket(QObject*) /tmp/qtbase-src/src/network/ssl/qsslsocket.cpp:400 (libQt6Network.so.6+0x267f0c) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#12 AetherSDR::WanConnection::WanConnection(QObject*) /__w/AetherSDR/AetherSDR/src/core/backends/flex/WanConnection.cpp:113 (libaethercore.so+0x6e76f7) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#13 wanFallback /__w/AetherSDR/AetherSDR/tests/receive_intent_routing_test.cpp:338 (receive_intent_routing_test+0x12312) (BuildId: 7aa3dff1e7243749534f8159ec62963df80fcd6c)
#14 main /__w/AetherSDR/AetherSDR/tests/receive_intent_routing_test.cpp:433 (receive_intent_routing_test+0x9bb9) (BuildId: 7aa3dff1e7243749534f8159ec62963df80fcd6c)
Mutex M0 acquired here while holding mutex M1 in main thread:
#0 __tsan_mutex_pre_lock ../../../../src/libsanitizer/tsan/tsan_interface_ann.cpp:364 (libtsan.so.2+0x8db48) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 QtTsan::mutexPreLock(void*, unsigned int) /tmp/qtbase-src/src/corelib/thread/qtsan_impl.h:51 (libQt6Network.so.6+0x26ae90) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#2 QBasicMutex::lock() /tmp/qtbase-src/src/corelib/thread/qmutex.h:42 (libQt6Network.so.6+0x26ae90)
#3 QMutexLocker<QMutex>::QMutexLocker(QMutex*) /tmp/qtbase-src/src/corelib/thread/qmutex.h:256 (libQt6Network.so.6+0x25c380) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#4 operator() /tmp/qtbase-src/src/network/ssl/qsslsocket.cpp:3125 (libQt6Network.so.6+0x25c380)
#5 operator() /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:117 (libQt6Network.so.6+0x25c380)
#6 call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<long unsigned int>, QtPrivate::List<>, void, QSslSocketPrivate::tlsBackendInUse()::<lambda()> >::call(QSslSocketPrivate::tlsBackendInUse()::<lambda()>&, void**)::<lambda()> > /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:66 (libQt6Network.so.6+0x25c380)
#7 call /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:116 (libQt6Network.so.6+0x25c380)
#8 call<QtPrivate::List<>, void> /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:338 (libQt6Network.so.6+0x25c380)
#9 impl /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:548 (libQt6Network.so.6+0x25c380)
#10 QtPrivate::QSlotObjectBase::call(QObject*, void**) /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:462 (libQt6Core.so.6+0x2f2dea) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#11 void doActivate<false>(QObject*, int, void**) /tmp/qtbase-src/src/corelib/kernel/qobject.cpp:4431 (libQt6Core.so.6+0x2f2dea)
#12 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) /tmp/qtbase-src/src/corelib/kernel/qobject.cpp:4491 (libQt6Core.so.6+0x2e64ed) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#13 void QMetaObject::activate<void, QObject*>(QObject*, QMetaObject const*, int, void*, QObject* const&) /tmp/qtbase-src/src/corelib/kernel/qobjectdefs.h:320 (libQt6Core.so.6+0x2e6619) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#14 QObject::destroyed(QObject*) /tmp/qtbase-build/src/corelib/kernel/moc_qobject.cpp:186 (libQt6Core.so.6+0x2e6619)
#15 QObject::~QObject() /tmp/qtbase-src/src/corelib/kernel/qobject.cpp:1092 (libQt6Core.so.6+0x2eca85) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#16 QTlsBackend::~QTlsBackend() /tmp/qtbase-src/src/network/ssl/qtlsbackend.cpp:190 (libQt6Network.so.6+0x147a87) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#17 QTlsBackendOpenSSL::~QTlsBackendOpenSSL() /tmp/qtbase-src/src/plugins/tls/openssl/qtlsbackend_openssl_p.h:33 (libqopensslbackend.so+0x25333) (BuildId: 15cc6d8e083633c93a81f5e72dcce11a1d85cd90)
#18 QTlsBackendOpenSSL::~QTlsBackendOpenSSL() /tmp/qtbase-src/src/plugins/tls/openssl/qtlsbackend_openssl_p.h:33 (libqopensslbackend.so+0x25333)
#19 QFactoryLoader::~QFactoryLoader() /tmp/qtbase-src/src/corelib/plugin/qfactoryloader.cpp:404 (libQt6Core.so.6+0x325982) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#20 reset /tmp/qtbase-src/src/corelib/kernel/qapplicationstatic.h:72 (libQt6Network.so.6+0x14676b) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#21 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (*)()>::call(void (*&)(), void**)::{lambda()#1}::operator()() const /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:117 (libQt6Network.so.6+0x92d7b) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#22 void QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (*)()>::call(void (*&)(), void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (*)()>::call(void (*&)(), void**)::{lambda()#1}&&) /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:66 (libQt6Network.so.6+0x92d7b)
#23 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (*)()>::call(void (*&)(), void**) /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:116 (libQt6Network.so.6+0x92d7b)
#24 void QtPrivate::FunctionPointer<void (*)()>::call<QtPrivate::List<>, void>(void (*)(), void*, void**) /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:199 (libQt6Network.so.6+0x92d7b)
#25 QtPrivate::QCallableObject<void (*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:548 (libQt6Network.so.6+0x92d7b)
#26 QtPrivate::QSlotObjectBase::call(QObject*, void**) /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:462 (libQt6Core.so.6+0x2f2dea) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#27 void doActivate<false>(QObject*, int, void**) /tmp/qtbase-src/src/corelib/kernel/qobject.cpp:4431 (libQt6Core.so.6+0x2f2dea)
#28 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) /tmp/qtbase-src/src/corelib/kernel/qobject.cpp:4491 (libQt6Core.so.6+0x2e64ed) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#29 void QMetaObject::activate<void, QObject*>(QObject*, QMetaObject const*, int, void*, QObject* const&) /tmp/qtbase-src/src/corelib/kernel/qobjectdefs.h:320 (libQt6Core.so.6+0x2e6619) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#30 QObject::destroyed(QObject*) /tmp/qtbase-build/src/corelib/kernel/moc_qobject.cpp:186 (libQt6Core.so.6+0x2e6619)
#31 QObject::~QObject() /tmp/qtbase-src/src/corelib/kernel/qobject.cpp:1092 (libQt6Core.so.6+0x2eca85) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#32 QCoreApplication::~QCoreApplication() /tmp/qtbase-src/src/corelib/kernel/qcoreapplication.cpp:987 (libQt6Core.so.6+0x246209) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#33 main /__w/AetherSDR/AetherSDR/tests/receive_intent_routing_test.cpp:436 (receive_intent_routing_test+0x9b74) (BuildId: 7aa3dff1e7243749534f8159ec62963df80fcd6c)
Mutex M1 previously acquired by the same thread here:
#0 __tsan_mutex_post_lock ../../../../src/libsanitizer/tsan/tsan_interface_ann.cpp:377 (libtsan.so.2+0x8dc5f) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 QtTsan::mutexPostLock(void*, unsigned int, int) /tmp/qtbase-src/src/corelib/thread/qtsan_impl.h:56 (libQt6Network.so.6+0x1466fc) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#2 QBasicMutex::lock() /tmp/qtbase-src/src/corelib/thread/qmutex.h:47 (libQt6Network.so.6+0x1466fc)
#3 QMutexLocker<QBasicMutex>::QMutexLocker(QBasicMutex*) /tmp/qtbase-src/src/corelib/thread/qmutex.h:256 (libQt6Network.so.6+0x1466fc)
#4 reset /tmp/qtbase-src/src/corelib/kernel/qapplicationstatic.h:70 (libQt6Network.so.6+0x1466fc)
#5 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (*)()>::call(void (*&)(), void**)::{lambda()#1}::operator()() const /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:117 (libQt6Network.so.6+0x92d7b) (BuildId: 91c89ff9607ec682e4185a430da99117230eca4a)
#6 void QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (*)()>::call(void (*&)(), void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (*)()>::call(void (*&)(), void**)::{lambda()#1}&&) /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:66 (libQt6Network.so.6+0x92d7b)
#7 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (*)()>::call(void (*&)(), void**) /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:116 (libQt6Network.so.6+0x92d7b)
#8 void QtPrivate::FunctionPointer<void (*)()>::call<QtPrivate::List<>, void>(void (*)(), void*, void**) /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:199 (libQt6Network.so.6+0x92d7b)
#9 QtPrivate::QCallableObject<void (*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:548 (libQt6Network.so.6+0x92d7b)
#10 QtPrivate::QSlotObjectBase::call(QObject*, void**) /tmp/qtbase-src/src/corelib/kernel/qobjectdefs_impl.h:462 (libQt6Core.so.6+0x2f2dea) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#11 void doActivate<false>(QObject*, int, void**) /tmp/qtbase-src/src/corelib/kernel/qobject.cpp:4431 (libQt6Core.so.6+0x2f2dea)
#12 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) /tmp/qtbase-src/src/corelib/kernel/qobject.cpp:4491 (libQt6Core.so.6+0x2e64ed) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#13 void QMetaObject::activate<void, QObject*>(QObject*, QMetaObject const*, int, void*, QObject* const&) /tmp/qtbase-src/src/corelib/kernel/qobjectdefs.h:320 (libQt6Core.so.6+0x2e6619) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#14 QObject::destroyed(QObject*) /tmp/qtbase-build/src/corelib/kernel/moc_qobject.cpp:186 (libQt6Core.so.6+0x2e6619)
#15 QObject::~QObject() /tmp/qtbase-src/src/corelib/kernel/qobject.cpp:1092 (libQt6Core.so.6+0x2eca85) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#16 QCoreApplication::~QCoreApplication() /tmp/qtbase-src/src/corelib/kernel/qcoreapplication.cpp:987 (libQt6Core.so.6+0x246209) (BuildId: e1c59621e83b8209271384dc2627bdc6a1010234)
#17 main /__w/AetherSDR/AetherSDR/tests/receive_intent_routing_test.cpp:436 (receive_intent_routing_test+0x9b74) (BuildId: 7aa3dff1e7243749534f8159ec62963df80fcd6c)
SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) /tmp/qtbase-src/src/corelib/thread/qtsan_impl.h:56 in QtTsan::mutexPostLock(void*, unsigned int, int)
--
b4: Ok rms=0.353623
b5: Ok rms=0.354815
==================
WARNING: ThreadSanitizer: data race (pid=34368)
Write of size 4 at 0x72180001a700 by main thread (mutexes: write M0):
#0 TXASetupBPFilters /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/TXA.c:822 (libaethercore.so+0x156f27b) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#1 SetTXABandpassFreqs /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/TXA.c:791 (libaethercore.so+0x156fb7e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 WdspChannel::setFilter(double, double) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:572 (libaethercore.so+0x8dcf14) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#3 runTransmitZerosCensusTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3225 (wdsp_channel_test+0x1a5dc) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#4 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#5 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3939 (wdsp_channel_test+0x507f) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
Previous read of size 4 at 0x72180001a700 by thread T403 (mutexes: write M1):
#0 xbandpass /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/bandpass.c:321 (libaethercore.so+0x157ea37) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#1 xtxa /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/TXA.c:565 (libaethercore.so+0x156be4d) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 wdspmain /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/main.c:62 (libaethercore.so+0x15c7cba) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#3 threadTrampoline /__w/AetherSDR/AetherSDR/third_party/wdsp/port/wdsp_port.c:287 (libaethercore.so+0x15fbde2) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
As if synchronized via sleep:
#0 nanosleep ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:397 (libtsan.so.2+0x58cc6) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 void std::this_thread::sleep_for<long, std::ratio<1l, 1000000l> >(std::chrono::duration<long, std::ratio<1l, 1000000l> > const&) /usr/include/c++/13/bits/this_thread_sleep.h:80 (wdsp_channel_test+0x1a317) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#2 runTransmitZerosCensusTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3231 (wdsp_channel_test+0x1a317)
#3 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#4 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3939 (wdsp_channel_test+0x507f) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
Location is heap block of size 88 at 0x72180001a700 allocated by main thread:
#0 posix_memalign ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:858 (libtsan.so.2+0x54e2f) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 wdspAlignedAllocate /__w/AetherSDR/AetherSDR/third_party/wdsp/port/wdsp_port.c:380 (libaethercore.so+0x15fca5e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 malloc0 /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/utilities.c:40 (libaethercore.so+0x15f34f3) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#3 create_bandpass /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/bandpass.c:288 (libaethercore.so+0x157e7d9) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#4 create_txa /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/TXA.c:241 (libaethercore.so+0x156dbc6) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#5 create_main /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/main.c:92 (libaethercore.so+0x15c7e86) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#6 build_channel /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:80 (libaethercore.so+0x1592a6b) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#7 OpenChannel /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:101 (libaethercore.so+0x1592a6b)
#8 WdspChannel::open() /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:1243 (libaethercore.so+0x8e0a34) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#9 WdspChannel::create(WdspChannel::Config const&, WdspChannel::Reservation&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:297 (libaethercore.so+0x8e166e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#10 WdspChannel::create(WdspChannel::Config const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:272 (libaethercore.so+0x8e17f0) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#11 runTransmitZerosCensusTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3201 (wdsp_channel_test+0x19f8d) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#12 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#13 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3939 (wdsp_channel_test+0x507f) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
Mutex M0 (0x7fb7d84ff3e0) created at:
#0 pthread_mutex_lock ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1341 (libtsan.so.2+0x59a13) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 __gthread_mutex_lock /usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h:749 (libaethercore.so+0x8e084e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 std::mutex::lock() /usr/include/c++/13/bits/std_mutex.h:113 (libaethercore.so+0x8e084e)
#3 std::scoped_lock<std::mutex>::scoped_lock(std::mutex&) /usr/include/c++/13/mutex:779 (libaethercore.so+0x8e084e)
#4 WdspChannel::open() /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:1241 (libaethercore.so+0x8e084e)
#5 WdspChannel::create(WdspChannel::Config const&, WdspChannel::Reservation&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:297 (libaethercore.so+0x8e166e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#6 WdspChannel::create(WdspChannel::Config const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:272 (libaethercore.so+0x8e17f0) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#7 runLifecycleTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:1737 (wdsp_channel_test+0x7f53) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#8 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#9 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3922 (wdsp_channel_test+0x4f84) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
Mutex M1 (0x7fb7d850dfc8) created at:
#0 pthread_mutex_init ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1315 (libtsan.so.2+0x594cd) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 InitializeCriticalSectionAndSpinCount /__w/AetherSDR/AetherSDR/third_party/wdsp/port/wdsp_port.c:101 (libaethercore.so+0x15fbecd) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 pre_main_build /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:63 (libaethercore.so+0x159271a) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#3 build_channel /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:79 (libaethercore.so+0x1592a63) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#4 OpenChannel /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:101 (libaethercore.so+0x1592a63)
#5 WdspChannel::open() /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:1243 (libaethercore.so+0x8e0a34) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#6 WdspChannel::create(WdspChannel::Config const&, WdspChannel::Reservation&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:297 (libaethercore.so+0x8e166e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#7 WdspChannel::create(WdspChannel::Config const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:272 (libaethercore.so+0x8e17f0) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#8 runTransmitZerosCensusTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3201 (wdsp_channel_test+0x19f8d) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#9 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#10 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3939 (wdsp_channel_test+0x507f) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
Thread T403 (tid=34772, running) created by main thread at:
#0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1022 (libtsan.so.2+0x5ac1a) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 wdspBeginThread /__w/AetherSDR/AetherSDR/third_party/wdsp/port/wdsp_port.c:309 (libaethercore.so+0x15fc828) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 start_thread /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:42 (libaethercore.so+0x159282a) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#3 post_main_build /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:72 (libaethercore.so+0x159282a)
#4 build_channel /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:81 (libaethercore.so+0x1592a73) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#5 OpenChannel /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:101 (libaethercore.so+0x1592a73)
#6 WdspChannel::open() /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:1243 (libaethercore.so+0x8e0a34) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#7 WdspChannel::create(WdspChannel::Config const&, WdspChannel::Reservation&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:297 (libaethercore.so+0x8e166e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#8 WdspChannel::create(WdspChannel::Config const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:272 (libaethercore.so+0x8e17f0) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#9 runTransmitZerosCensusTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3201 (wdsp_channel_test+0x19f8d) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#10 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#11 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3939 (wdsp_channel_test+0x507f) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
SUMMARY: ThreadSanitizer: data race /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/TXA.c:822 in TXASetupBPFilters
==================
==================
WARNING: ThreadSanitizer: data race (pid=34368)
Write of size 4 at 0x72180001ac40 by main thread (mutexes: write M0):
#0 TXASetupBPFilters /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/TXA.c:823 (libaethercore.so+0x156f29e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#1 SetTXABandpassFreqs /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/TXA.c:791 (libaethercore.so+0x156fb7e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 WdspChannel::setFilter(double, double) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:572 (libaethercore.so+0x8dcf14) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#3 runTransmitZerosCensusTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3225 (wdsp_channel_test+0x1a5dc) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#4 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#5 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3939 (wdsp_channel_test+0x507f) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
Previous read of size 4 at 0x72180001ac40 by thread T403 (mutexes: write M1):
#0 xbandpass /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/bandpass.c:321 (libaethercore.so+0x157ea37) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#1 xtxa /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/TXA.c:567 (libaethercore.so+0x156be7f) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 wdspmain /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/main.c:62 (libaethercore.so+0x15c7cba) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#3 threadTrampoline /__w/AetherSDR/AetherSDR/third_party/wdsp/port/wdsp_port.c:287 (libaethercore.so+0x15fbde2) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
As if synchronized via sleep:
#0 nanosleep ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:397 (libtsan.so.2+0x58cc6) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 void std::this_thread::sleep_for<long, std::ratio<1l, 1000000l> >(std::chrono::duration<long, std::ratio<1l, 1000000l> > const&) /usr/include/c++/13/bits/this_thread_sleep.h:80 (wdsp_channel_test+0x1a317) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#2 runTransmitZerosCensusTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3231 (wdsp_channel_test+0x1a317)
#3 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#4 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3939 (wdsp_channel_test+0x507f) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
Location is heap block of size 88 at 0x72180001ac40 allocated by main thread:
#0 posix_memalign ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:858 (libtsan.so.2+0x54e2f) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 wdspAlignedAllocate /__w/AetherSDR/AetherSDR/third_party/wdsp/port/wdsp_port.c:380 (libaethercore.so+0x15fca5e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 malloc0 /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/utilities.c:40 (libaethercore.so+0x15f34f3) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#3 create_bandpass /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/bandpass.c:288 (libaethercore.so+0x157e7d9) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#4 create_txa /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/TXA.c:262 (libaethercore.so+0x156dcde) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#5 create_main /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/main.c:92 (libaethercore.so+0x15c7e86) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#6 build_channel /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:80 (libaethercore.so+0x1592a6b) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#7 OpenChannel /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:101 (libaethercore.so+0x1592a6b)
#8 WdspChannel::open() /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:1243 (libaethercore.so+0x8e0a34) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#9 WdspChannel::create(WdspChannel::Config const&, WdspChannel::Reservation&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:297 (libaethercore.so+0x8e166e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#10 WdspChannel::create(WdspChannel::Config const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:272 (libaethercore.so+0x8e17f0) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#11 runTransmitZerosCensusTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3201 (wdsp_channel_test+0x19f8d) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#12 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#13 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3939 (wdsp_channel_test+0x507f) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
Mutex M0 (0x7fb7d84ff3e0) created at:
#0 pthread_mutex_lock ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1341 (libtsan.so.2+0x59a13) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 __gthread_mutex_lock /usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h:749 (libaethercore.so+0x8e084e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 std::mutex::lock() /usr/include/c++/13/bits/std_mutex.h:113 (libaethercore.so+0x8e084e)
#3 std::scoped_lock<std::mutex>::scoped_lock(std::mutex&) /usr/include/c++/13/mutex:779 (libaethercore.so+0x8e084e)
#4 WdspChannel::open() /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:1241 (libaethercore.so+0x8e084e)
#5 WdspChannel::create(WdspChannel::Config const&, WdspChannel::Reservation&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:297 (libaethercore.so+0x8e166e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#6 WdspChannel::create(WdspChannel::Config const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:272 (libaethercore.so+0x8e17f0) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#7 runLifecycleTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:1737 (wdsp_channel_test+0x7f53) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#8 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#9 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3922 (wdsp_channel_test+0x4f84) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
Mutex M1 (0x7fb7d850dfc8) created at:
#0 pthread_mutex_init ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1315 (libtsan.so.2+0x594cd) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 InitializeCriticalSectionAndSpinCount /__w/AetherSDR/AetherSDR/third_party/wdsp/port/wdsp_port.c:101 (libaethercore.so+0x15fbecd) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 pre_main_build /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:63 (libaethercore.so+0x159271a) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#3 build_channel /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:79 (libaethercore.so+0x1592a63) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#4 OpenChannel /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:101 (libaethercore.so+0x1592a63)
#5 WdspChannel::open() /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:1243 (libaethercore.so+0x8e0a34) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#6 WdspChannel::create(WdspChannel::Config const&, WdspChannel::Reservation&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:297 (libaethercore.so+0x8e166e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#7 WdspChannel::create(WdspChannel::Config const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:272 (libaethercore.so+0x8e17f0) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#8 runTransmitZerosCensusTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3201 (wdsp_channel_test+0x19f8d) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#9 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#10 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3939 (wdsp_channel_test+0x507f) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
Thread T403 (tid=34772, running) created by main thread at:
#0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1022 (libtsan.so.2+0x5ac1a) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 wdspBeginThread /__w/AetherSDR/AetherSDR/third_party/wdsp/port/wdsp_port.c:309 (libaethercore.so+0x15fc828) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 start_thread /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:42 (libaethercore.so+0x159282a) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#3 post_main_build /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:72 (libaethercore.so+0x159282a)
#4 build_channel /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:81 (libaethercore.so+0x1592a73) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#5 OpenChannel /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:101 (libaethercore.so+0x1592a73)
#6 WdspChannel::open() /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:1243 (libaethercore.so+0x8e0a34) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#7 WdspChannel::create(WdspChannel::Config const&, WdspChannel::Reservation&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:297 (libaethercore.so+0x8e166e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#8 WdspChannel::create(WdspChannel::Config const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:272 (libaethercore.so+0x8e17f0) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#9 runTransmitZerosCensusTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3201 (wdsp_channel_test+0x19f8d) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#10 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#11 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3939 (wdsp_channel_test+0x507f) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
SUMMARY: ThreadSanitizer: data race /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/TXA.c:823 in TXASetupBPFilters
==================
==================
WARNING: ThreadSanitizer: data race (pid=34368)
Write of size 4 at 0x72180001c200 by main thread (mutexes: write M0):
#0 TXASetupBPFilters /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/TXA.c:824 (libaethercore.so+0x156f2cc) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#1 SetTXABandpassFreqs /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/TXA.c:791 (libaethercore.so+0x156fb7e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 WdspChannel::setFilter(double, double) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:572 (libaethercore.so+0x8dcf14) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#3 runTransmitZerosCensusTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3225 (wdsp_channel_test+0x1a5dc) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#4 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#5 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3939 (wdsp_channel_test+0x507f) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
Previous read of size 4 at 0x72180001c200 by thread T403 (mutexes: write M1):
#0 xbandpass /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/bandpass.c:321 (libaethercore.so+0x157ea37) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#1 xtxa /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/TXA.c:569 (libaethercore.so+0x156beb3) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 wdspmain /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/main.c:62 (libaethercore.so+0x15c7cba) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#3 threadTrampoline /__w/AetherSDR/AetherSDR/third_party/wdsp/port/wdsp_port.c:287 (libaethercore.so+0x15fbde2) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
As if synchronized via sleep:
#0 nanosleep ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:397 (libtsan.so.2+0x58cc6) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 void std::this_thread::sleep_for<long, std::ratio<1l, 1000000l> >(std::chrono::duration<long, std::ratio<1l, 1000000l> > const&) /usr/include/c++/13/bits/this_thread_sleep.h:80 (wdsp_channel_test+0x1a317) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#2 runTransmitZerosCensusTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3231 (wdsp_channel_test+0x1a317)
#3 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#4 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3939 (wdsp_channel_test+0x507f) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
Location is heap block of size 88 at 0x72180001c200 allocated by main thread:
#0 posix_memalign ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:858 (libtsan.so.2+0x54e2f) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 wdspAlignedAllocate /__w/AetherSDR/AetherSDR/third_party/wdsp/port/wdsp_port.c:380 (libaethercore.so+0x15fca5e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 malloc0 /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/utilities.c:40 (libaethercore.so+0x15f34f3) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#3 create_bandpass /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/bandpass.c:288 (libaethercore.so+0x157e7d9) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#4 create_txa /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/TXA.c:284 (libaethercore.so+0x156de44) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#5 create_main /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/main.c:92 (libaethercore.so+0x15c7e86) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#6 build_channel /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:80 (libaethercore.so+0x1592a6b) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#7 OpenChannel /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:101 (libaethercore.so+0x1592a6b)
#8 WdspChannel::open() /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:1243 (libaethercore.so+0x8e0a34) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#9 WdspChannel::create(WdspChannel::Config const&, WdspChannel::Reservation&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:297 (libaethercore.so+0x8e166e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#10 WdspChannel::create(WdspChannel::Config const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:272 (libaethercore.so+0x8e17f0) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#11 runTransmitZerosCensusTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3201 (wdsp_channel_test+0x19f8d) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#12 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#13 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3939 (wdsp_channel_test+0x507f) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
Mutex M0 (0x7fb7d84ff3e0) created at:
#0 pthread_mutex_lock ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1341 (libtsan.so.2+0x59a13) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 __gthread_mutex_lock /usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h:749 (libaethercore.so+0x8e084e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 std::mutex::lock() /usr/include/c++/13/bits/std_mutex.h:113 (libaethercore.so+0x8e084e)
#3 std::scoped_lock<std::mutex>::scoped_lock(std::mutex&) /usr/include/c++/13/mutex:779 (libaethercore.so+0x8e084e)
#4 WdspChannel::open() /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:1241 (libaethercore.so+0x8e084e)
#5 WdspChannel::create(WdspChannel::Config const&, WdspChannel::Reservation&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:297 (libaethercore.so+0x8e166e) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#6 WdspChannel::create(WdspChannel::Config const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) /__w/AetherSDR/AetherSDR/src/core/dsp/WdspChannel.cpp:272 (libaethercore.so+0x8e17f0) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#7 runLifecycleTest /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:1737 (wdsp_channel_test+0x7f53) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#8 runLeakChecked<bool (&)()> /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:37 (wdsp_channel_test+0x5713) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
#9 main /__w/AetherSDR/AetherSDR/tests/wdsp_channel_test.cpp:3922 (wdsp_channel_test+0x4f84) (BuildId: e9ab6fd4a81d34948c023064ae78bf931ec807fe)
Mutex M1 (0x7fb7d850dfc8) created at:
#0 pthread_mutex_init ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1315 (libtsan.so.2+0x594cd) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)
#1 InitializeCriticalSectionAndSpinCount /__w/AetherSDR/AetherSDR/third_party/wdsp/port/wdsp_port.c:101 (libaethercore.so+0x15fbecd) (BuildId: f0d1a02788a9afe02aaf0d1481a25711a1474f9d)
#2 pre_main_build /__w/AetherSDR/AetherSDR/third_party/wdsp/upstream/channel.c:63 (libaethercore.so+0x159271a) (BuildId: f0d1a02788a9afe02aaf0d1481
Full sanitizer.log attached to the workflow run artifacts.
Metadata
Metadata
Assignees
Labels
SmartLinkSmartLink WAN remote connectionSmartLink WAN remote connectionbugSomething isn't workingSomething isn't workingmaintainer-reviewRequires maintainer review before any action is takenRequires maintainer review before any action is takenpriority: highHigh priorityHigh prioritysanitizertsan
Activity
aethersdr-agent commentedon Oct 4, 2026
Triage: new lead block, and it is Qt's inversion, not ours
Not a duplicate of today's other two
Three TSan issues were filed on 2026-10-04, all from
workflow_dispatchruns on the #6152 PR branch rather than the Saturday cron. The first two never measured anything:8c86ae9408ddb83f0666e78265304097123cSo #6156 is the real finding. Per the dedupe rule for these stickies, I compared first SUMMARY blocks only — #6148's
awaiting-response+ "what radio model?" boilerplate is wrong for an infra failure, but that is #6148's to fix, not this one's.Commit provenance
bdd9ae8is not onmain— it is the pre-squash head ofci/full-suite-disk, the #6152 branch (1 commit ahead ofmain, 3 behind), which landed as5fae7003. The finding is still live onmain:wanFallback()is there today attests/receive_intent_routing_test.cpp:585(the report's:338is that branch's numbering, before #6116/f4e463c2grew the file). This will recur every Saturday until it is suppressed.Lead block:
lock-order-inversionin Qt's TLS backend plumbingTwo mutexes, both Qt's, both taken on the main thread, in opposite orders inside one process:
QMutexinQSslSocketPrivate::tlsBackendInUse()(qsslsocket.cpp:3110)QApplicationStaticreset mutex guarding the TLSQFactoryLoader(qapplicationstatic.h:70)Order M0 → M1, at object construction:
wanFallback()→WanConnection::WanConnection()(src/core/backends/flex/WanConnection.cpp:113) →QSslSocketctor →QSslSocketPrivate→QSslConfigurationPrivate→QSslCertificate→ensureInitialized()→supportsSsl()→tlsBackendInUse()takes M0, and loads the OpenSSL plugin under it.Order M1 → M0, at process teardown (
receive_intent_routing_test.cpp:436, i.e.returnfrommain):~QCoreApplication→destroyed()→QApplicationStatic::resettakes M1 →~QFactoryLoader→~QTlsBackendOpenSSL→~QTlsBackend→~QObject→destroyed()→ thetlsBackendInUse()lambda atqsslsocket.cpp:3125takes M0 while still holding M1.No AetherSDR datum is in the cycle, and no AetherSDR code runs inside either critical section. TSan reports lock-order-inversion from observed orders regardless of thread, so a single-threaded A→B / B→A pair still fires; it cannot actually deadlock unless a second thread does TLS work during
~QCoreApplication, which nothing here does. This is a Qt defect (worth an upstream report), and it is unexploitable in our process as written.Why it is new now:
WanConnectionholdsQSslSocket m_socketby value (WanConnection.h:105), so merely instantiating one initializes the TLS backend.wanFallback()— added by #6125 (d9de044c) — is the only test in the tree that constructs aWanConnection/QSslSocket;async_log_writer_test.cpponly mentions the name in a string literal. Combine that with #6152 making the full 656-test tree fit on the runner, and this is the first lane run where aQSslSocketand a~QCoreApplicationcoexist.Proposed fix: one narrow anchored suppression
tests/sanitizers/tsan.suppalready describes this exact case in its header — "if the instrumented Qt produces a new noise class, TRIAGE it — a stack, an issue, and a narrow anchored entry with a caveat." Neither frame is in the DO-NOT-ADD list, and neither is one of ours, so this qualifies:deadlockis the correct suppression type for lock-order-inversion (verified against the TSan runtime's own suppression-type table, alongsiderace,mutex,thread,signal,called_from_lib).A test-side workaround would be the wrong fix. Production
MainWindowholdsWanConnectionby value too (the comment atWanConnection.cpp:133says as much), so a real session establishes the same M0→M1 order at startup and the same M1→M0 at exit. Not constructing one in the test would hide the report without changing the shipped order.What the excerpt does not cover
The lead block is truncated — frames #0–#15 and the "Cycle in lock order graph" header are cut, so the plugin-load-under-M0 step above is read off the M1→M0 stack rather than quoted directly. Full stacks are in the run's
sanitizer.logartifact.Of the 11 red tests, this excerpt explains three:
receive_intent_routing_test— the lead abovewdsp_channel_test— theTXASetupBPFilters/xbandpassWDSP race in the tail, already [sanitizer] TSan weekly run failure (fp 4fd7a70228fc) #5831's lead (SetTXABandpassFreqswriting TXA bandpass state underWdspChannel::open()'sstd::mutexwhile the WDSP DSP thread reads it under WDSP's own). Not new, not this issue.tci_server_review_test— the long-runningcaptureLogHandlerrace, [sanitizer] TSan weekly run failure (fp 129eb0a26fbf) #5614.The three Timeouts (
audio_engine_rates_test,weather_radar_loading_test,peripheral_auth_dialog_test) are plausibly the sanitizer-slowdown class with #5410 as precedent, but the excerpt carries no log for them.anan_rxdsp_handedness_test,spectrum_sequence_gap_test,wdsp_process_tally_test,tci_automation_testandtx_operation_integration_testare untriaged from this excerpt — reading the artifact is a separate pass, and I am deliberately not absorbing them into this issue.Handoff
main; recurs weekly.deadlock:entry above totests/sanitizers/tsan.supponmain. One file, no product change.priority: highon the sticky is the template's, not a judgement about this finding — nothing about it affects a shipped build. Worth filing upstream with Qt separately.— AetherClaude (automated agent for AetherSDR)
🤖 aethersdr-agent · cost: $5.5811 · model: claude-opus-5
📍 Citation health check (Foundry Constitution Principle I): 2 resolved, 6 unresolved against
/Users/aetherclaude/workspace/AetherSDRat origin/main.Unresolved citations (6)
WanConnection.cpp:133WanConnection.h:105qapplicationstatic.h:70qsslsocket.cpp:3110qsslsocket.cpp:3125receive_intent_routing_test.cpp:436ten9876 commentedon Oct 4, 2026
Consolidated TSan tracker
This is now the only open TSan issue. I've closed #3462, #5614, #5831, #5959 and #6148 into it. #6148 and #6144 never ran tests: Configure and Build failed for lack of disk, which #6152 fixed. Run 37208806037 is the first TSan run that reached ctest across the full tree, so most of what follows was hidden rather than new.
tsan.suppcurrently contains onlycalled_from_lib:libpulsecommon,race:^upslew2$andrace:^fexchange2$.Findings, grouped by root cause (11 tests)
receive_intent_routing_test,tci_automation_test,tci_server_review_testtlsBackendInUsevs theQApplicationStaticreset mutex), reached viaWanConnection.cpp:113/AutomationServer.cpp:3570,11960deadlock:QSslSocketPrivate::tlsBackendInUsesuppression.wdsp_channel_testTXA.c:822-824 TXASetupBPFiltersvsxbandpass, underWdspChannel.cpp:572SetTXABandpassFreqswrites TXA bandpass state underWdspChannel::open()'sstd::mutexwhile the WDSP DSP thread reads it under WDSP's own lock. Fix with a real lock, or a suppression that names the WDSP lock it relies on.anan_rxdsp_handedness_test,spectrum_sequence_gap_test,wdsp_process_tally_testanalyzer.c:1198 SetAnalyzer,Celiminate,stitch,Spectrum2,sendbuf, reached fromAnanPanAnalyzer.cpp:129(teardown drain barrier) andAnanRxDsp.cpp:39SetAnalyzer-as-drain-barrier really orders the FFT workers through WDSP sync that TSan can't see, or whether this is a real teardown race.tci_server_review_testcaptureLogHandlerappends to the globalQStringList* g_logSinkwith no lock (tests/tci_server_review_test.cpp:41) while Qt logs from worker threadsQMutexaround the sink.tx_operation_integration_testweather_radar_loading_test~QNetworkReplyvs a virtual call, viaDarkBasemapLayer.h:23deleteLatervs a direct delete). Not yet triaged.audio_engine_rates_test(120 s),peripheral_auth_dialog_test,weather_radar_loading_testCarried open, did not reproduce this run
decoder_audio_routing_test([sanitizer] TSan weekly run failure (fp 596465812892) #5959 lead): theDecoderAudioModel::Impl::rebind()connect/disconnect churn against a cross-threaddoActivatewalk. It passed in 37208806037, butDecoderAudioModel.cpphasn't changed since A5: route CW, RTTY and Clock through selected typed PCM #5758, so this is intermittent, not fixed. The full root cause and proposed fix (permanent lane connections;rebind()swaps the inbox instead of re-wiring) are in #5959's triage. Keep it on this list.Gone (no action)
hl2_adc_sampling_seam_test([sanitizer] TSan weekly run failure (fp 4fd7a70228fc) #5831, [sanitizer] TSan weekly run failure (fp 596465812892) #5959): passes in both lanes.audio_device_negotiator_test([sanitizer] TSan weekly run failure #3462's original June finding): passes, but only becausecalled_from_lib:libpulsecommonsuppresses it. The tsan image doesn't build an instrumented PulseAudio, so that suppression stays until it does.on8st commentedon Oct 4, 2026
Finding B,
wdsp_channel_test, is ours to look at: the leg that trips it,runTransmitZerosCensusTest, came in with #5747, and the HL2's default transmit path makes the same call (Hl2TxDsp::setFilter→WdspChannel::setFilter→SetTXABandpassFreqs).It is a product race in vendored WDSP, not a test bug.
SetTXABandpassFreqscallsTXASetupBPFilterswith no lock, while the worker reads therunflags inxbandpassundercsDSP.SetTXAModeholdscsDSParound the same call. Ourg_setupMutexdoes not cover the worker.Two shapes: take
csDSPinSetTXABandpassFreqs(a patch to the vendored file), or take it around the call inWdspChannel::setFilter. Which do you prefer? Read from source and your logged stacks; not reproduced here.Also:
spectrum_sequence_gap_testandwdsp_process_tally_testare files we added, but they report under C in their ANAN leg only (SetAnalyzerfrom~AnanPanAnalyzer).73, ON8ST
test(tsan): suppress Qt's TLS-backend lock-order inversion, anchored.…
fix(test): lock the TCI review test's log sink across threads. Princi…
3 remaining items
test(map): stub the network in every map-building radar test; suppres…
rfoust commentedon Oct 5, 2026
I am investigating the five remaining timeout failures on the final #6173 head (
7f37cf045), using run 37243767521:audio_engine_rates_test,nr_stereo_independence_test,rtl_spectrum_averaging_test,weather_radar_loading_test, andperipheral_auth_dialog_test. That run has zero TSan SUMMARY reports. I will keep the patch separate from #6173, preserve test assertions, and measure the remaining work before changing test partitioning or budgets. I am also checking the intermittent RTL capture fixture assertion seen in the prior branch run; it passed this run, so I am not claiming a product defect. No overlapping WDSP or Qt suppression changes are planned.Generated with OpenAI Codex.
rfoust commentedon Oct 5, 2026
The remaining timeout patch is prepared in an isolated worktree. It partitions the existing audio, NR, weather, and peripheral scenarios under their unchanged per-case timeout ceilings, reduces redundant RTL statistical FFT work, and makes the capture fixture measure the exact first DC-corrected window.
Local ARM64 validation: 69 focused cases passed and 4 unavailable optional NR cases skipped, both natively and under ASan/UBSan, with no failures or sanitizer reports. Full standalone audio still has 14,220 checks. Both RTL fixtures reject temporary production regressions, then pass after restoration. Full app build and registration/gate checks pass.
Linux TSan/LSan confirmation remains pending. The agent automation bridge cannot run these CTest fixtures, so publication is awaiting an operator decision on accepting direct test/sanitizer proof under the fixbug workflow. No PR or closing claim yet. Releasing my assignment while waiting; the prepared patch complements #6173.
rfoust commentedon Oct 5, 2026
Prepared patch published as draft #6196, complementing #6173. The operator approved using the direct CTest/ASan/UBSan and mutation evidence for this test-only change because the agent automation bridge cannot exercise these fixtures.
Commit
a0b4a1e1ee2e06309bfecd6455f575f8424d99ddhas a verified signature. Local native and ASan/UBSan runs each have 69 passes, 4 optional skips, and zero failures; regular PR CI has started. Linux TSan/LSan confirmation and the carried intermittent DecoderAudioModel report remain outstanding, so #6156 stays open. Releasing my issue assignment after publication.fix(sanitizers): clear every ASan/UBSan/TSan report on the full-tree …
ten9876 commentedon Oct 5, 2026
Findings A–F are fixed on
main(#6173). The current run onmain, 37280204924, has zero ThreadSanitizer reports. What remains (five sanitizer timeouts, the intermittentrtl_capture_worker_testassertion, and the carriedDecoderAudioModelrace) is tracked in #6202, which is the current fingerprinted tracker the workflow will add future runs to.test(hl2): age gate helper, seam test off the clock. Principle VIII. (#…
test: bound sanitizer scenarios and stabilize RTL fixtures (#6156). P…
test(hl2): pin the TXA transmit passband and onset. Principle VIII. (#…
fix(gui): HL2 ALC gain comments say it only reduces. Principle VIII. (#…