From 80ab33da45f25e880baefc3abfd0ebdf078b26bb Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Thu, 25 Jun 2026 10:12:06 +0100 Subject: [PATCH 1/3] Skip `test_abstractmethod_integration` on free-threading --- Lib/test/test_abc.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py index 59a45a2eda07b00..0956f39fd4a5d13 100644 --- a/Lib/test/test_abc.py +++ b/Lib/test/test_abc.py @@ -11,7 +11,7 @@ import abc import _py_abc from inspect import isabstract -from test.support import warnings_helper +from test.support import requires_gil_enabled, warnings_helper def test_factory(abc_ABCMeta, abc_get_cache_token): class TestLegacyAPI(unittest.TestCase): @@ -198,6 +198,7 @@ def method_two(self): msg = r"class C without an implementation for abstract methods 'method_one', 'method_two'" self.assertRaisesRegex(TypeError, msg, C) + @requires_gil_enabled() @warnings_helper.ignore_warnings(category=DeprecationWarning) def test_abstractmethod_integration(self): for abstractthing in [abc.abstractmethod, abc.abstractproperty, From d2782d5567267bafe43471a67e710edcdf37a157 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Thu, 25 Jun 2026 11:05:36 +0100 Subject: [PATCH 2/3] Revert "Skip `test_abstractmethod_integration` on free-threading" This reverts commit 80ab33da45f25e880baefc3abfd0ebdf078b26bb. --- Lib/test/test_abc.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py index 0956f39fd4a5d13..59a45a2eda07b00 100644 --- a/Lib/test/test_abc.py +++ b/Lib/test/test_abc.py @@ -11,7 +11,7 @@ import abc import _py_abc from inspect import isabstract -from test.support import requires_gil_enabled, warnings_helper +from test.support import warnings_helper def test_factory(abc_ABCMeta, abc_get_cache_token): class TestLegacyAPI(unittest.TestCase): @@ -198,7 +198,6 @@ def method_two(self): msg = r"class C without an implementation for abstract methods 'method_one', 'method_two'" self.assertRaisesRegex(TypeError, msg, C) - @requires_gil_enabled() @warnings_helper.ignore_warnings(category=DeprecationWarning) def test_abstractmethod_integration(self): for abstractthing in [abc.abstractmethod, abc.abstractproperty, From 24e9fce207a819317f99bd3206f700388b4a3361 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Thu, 25 Jun 2026 11:07:16 +0100 Subject: [PATCH 3/3] Allow the job to fail instead --- .github/workflows/build.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d9a956a6bf53038..f54692e9b4e4c02 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -558,7 +558,6 @@ jobs: - Thread free-threading: - false - - true sanitizer: - TSan include: @@ -570,6 +569,17 @@ jobs: sanitizer: ${{ matrix.sanitizer }} free-threading: ${{ matrix.free-threading }} + # XXX: Temporarily allow this job to fail to not block PRs. + build-san-free-threading: + # ${{ '' } is a hack to nest jobs under the same sidebar category. + name: Sanitizers${{ '' }} # zizmor: ignore[obfuscation] + needs: build-context + if: needs.build-context.outputs.run-ubuntu == 'true' + uses: ./.github/workflows/reusable-san.yml + with: + sanitizer: TSan + free-threading: true + cross-build-linux: name: Cross build Linux runs-on: ubuntu-latest @@ -673,6 +683,7 @@ jobs: - test-hypothesis - build-asan - build-san + - build-san-free-threading - cross-build-linux - cifuzz if: always() @@ -684,6 +695,7 @@ jobs: allowed-failures: >- build-android, build-emscripten, + build-san-free-threading, build-windows-msi, build-ubuntu-ssltests, test-hypothesis,