From 39cbaa3fa99bb65533e511e247dc605955419289 Mon Sep 17 00:00:00 2001 From: Sam Gross Date: Fri, 14 Feb 2025 21:50:46 +0000 Subject: [PATCH] gh-117657: Skip some tests when running with TSAN The subinterpreter tests have data races (see gh-129824). TSAN attempts to intercept some of the fatal signals, which can lead to bogus reports. We could possibly handle these via TSAN_OPTIONS, but it's simpler to just skip those tests -- they're not multithreaded anyways. --- Lib/test/test__interpchannels.py | 3 ++- Lib/test/test__interpreters.py | 1 + Lib/test/test_capi/test_misc.py | 1 + Lib/test/test_faulthandler.py | 4 ++++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Lib/test/test__interpchannels.py b/Lib/test/test__interpchannels.py index 4a7f04b9df9843..e4c1ad854514ed 100644 --- a/Lib/test/test__interpchannels.py +++ b/Lib/test/test__interpchannels.py @@ -6,7 +6,7 @@ import time import unittest -from test.support import import_helper +from test.support import import_helper, skip_if_sanitizer _channels = import_helper.import_module('_interpchannels') from test.support.interpreters import _crossinterp @@ -365,6 +365,7 @@ def test_shareable(self): #self.assertIsNot(got, obj) +@skip_if_sanitizer('gh-129824: race on _waiting_release', thread=True) class ChannelTests(TestBase): def test_create_cid(self): diff --git a/Lib/test/test__interpreters.py b/Lib/test/test__interpreters.py index fd444f1f06ce48..7fba16bafbac37 100644 --- a/Lib/test/test__interpreters.py +++ b/Lib/test/test__interpreters.py @@ -365,6 +365,7 @@ def test_unique_id(self): self.assertEqual(len(seen), 100) + @support.skip_if_sanitizer('gh-129824: race on tp_flags', thread=True) def test_in_thread(self): lock = threading.Lock() id = None diff --git a/Lib/test/test_capi/test_misc.py b/Lib/test/test_capi/test_misc.py index 2e1e8e77d620d1..98dc3b42ef0bec 100644 --- a/Lib/test/test_capi/test_misc.py +++ b/Lib/test/test_capi/test_misc.py @@ -1411,6 +1411,7 @@ def run_tasks(): self.assertNotIn(task.requester_tid, runner_tids) @requires_subinterpreters + @support.skip_if_sanitizer("gh-129824: race on assign_version_tag", thread=True) def test_isolated_subinterpreter(self): # We exercise the most important permutations. diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py index bcebaef0a5101a..998d8e3ce25285 100644 --- a/Lib/test/test_faulthandler.py +++ b/Lib/test/test_faulthandler.py @@ -227,6 +227,7 @@ def test_fatal_error_c_thread(self): func='faulthandler_fatal_error_thread', py_fatal_error=True) + @support.skip_if_sanitizer("TSAN itercepts SIGABRT", thread=True) def test_sigabrt(self): self.check_fatal_error(""" import faulthandler @@ -238,6 +239,7 @@ def test_sigabrt(self): @unittest.skipIf(sys.platform == 'win32', "SIGFPE cannot be caught on Windows") + @support.skip_if_sanitizer("TSAN itercepts SIGFPE", thread=True) def test_sigfpe(self): self.check_fatal_error(""" import faulthandler @@ -249,6 +251,7 @@ def test_sigfpe(self): @unittest.skipIf(_testcapi is None, 'need _testcapi') @unittest.skipUnless(hasattr(signal, 'SIGBUS'), 'need signal.SIGBUS') + @support.skip_if_sanitizer("TSAN itercepts SIGBUS", thread=True) @skip_segfault_on_android def test_sigbus(self): self.check_fatal_error(""" @@ -263,6 +266,7 @@ def test_sigbus(self): @unittest.skipIf(_testcapi is None, 'need _testcapi') @unittest.skipUnless(hasattr(signal, 'SIGILL'), 'need signal.SIGILL') + @support.skip_if_sanitizer("TSAN itercepts SIGILL", thread=True) @skip_segfault_on_android def test_sigill(self): self.check_fatal_error("""