@@ -50,6 +50,11 @@ def skip_unless_reliable_fork(test):
50
50
return test
51
51
52
52
53
+ skip_if_tsan_fork = unittest .skipIf (
54
+ support .check_sanitizer (thread = True ),
55
+ "TSAN doesn't support threads after fork" )
56
+
57
+
53
58
def requires_subinterpreters (meth ):
54
59
"""Decorator to skip a test if subinterpreters are not supported."""
55
60
return unittest .skipIf (interpreters is None ,
@@ -634,6 +639,7 @@ def test_daemon_param(self):
634
639
self .assertTrue (t .daemon )
635
640
636
641
@skip_unless_reliable_fork
642
+ @skip_if_tsan_fork
637
643
def test_dummy_thread_after_fork (self ):
638
644
# Issue #14308: a dummy thread in the active list doesn't mess up
639
645
# the after-fork mechanism.
@@ -703,6 +709,7 @@ def f():
703
709
704
710
@skip_unless_reliable_fork
705
711
@unittest .skipUnless (hasattr (os , 'waitpid' ), "test needs os.waitpid()" )
712
+ @skip_if_tsan_fork
706
713
def test_main_thread_after_fork (self ):
707
714
code = """if 1:
708
715
import os, threading
@@ -1271,6 +1278,7 @@ def test_2_join_in_forked_process(self):
1271
1278
self ._run_and_join (script )
1272
1279
1273
1280
@skip_unless_reliable_fork
1281
+ @skip_if_tsan_fork
1274
1282
def test_3_join_in_forked_from_thread (self ):
1275
1283
# Like the test above, but fork() was called from a worker thread
1276
1284
# In the forked process, the main Thread object must be marked as stopped.
0 commit comments