These may all exercise some non-trivial aspects of thread synchronization.
# chosen because they use threads and run in a reasonable amount of time.
TSAN_TESTS = [
+ # TODO: enable more of test_capi once bugs are fixed (GH-116908, GH-116909).
+ 'test_capi.test_mem',
+ 'test_capi.test_pyatomic',
'test_code',
'test_enum',
'test_functools',
'test_io',
'test_logging',
'test_queue',
+ 'test_signal',
+ 'test_socket',
+ 'test_sqlite3',
'test_ssl',
'test_syslog',
'test_thread',
static PyObject *
check_pyobject_freed_is_freed(PyObject *self, PyObject *Py_UNUSED(args))
{
- /* This test would fail if run with the address sanitizer */
-#ifdef _Py_ADDRESS_SANITIZER
+ /* ASan or TSan would report an use-after-free error */
+#if defined(_Py_ADDRESS_SANITIZER) || defined(_Py_THREAD_SANITIZER)
Py_RETURN_NONE;
#else
PyObject *op = PyObject_CallNoArgs((PyObject *)&PyBaseObject_Type);