From 2b97a91f30f9ed4b6fa286249de6755de3e3057b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 13 Sep 2026 14:10:25 +0200 Subject: [PATCH] gh-157415: Skip @support.nomemtest if Python is built with TSAN There is a known data race involving PyMem_SetAllocator(). Just skip tests using _testcapi.set_nomemory() is Python is built with the thread sanitizer. Mark test_io.test_memoryio test using _testcapi.set_nomemory() with @support.nomemtest. --- Lib/test/support/__init__.py | 6 +++++- Lib/test/test_io/test_memoryio.py | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index 210982fae236d5..625898e6734aaa 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -1373,7 +1373,11 @@ def internal(*args, **kwargs): import_module('_testcapi') return test(*args, **kwargs) - return cpython_only(internal) + use_tsan = check_sanitizer(thread=True) + reason ='not working with thread sanitizer (gh-157415)' + skip_if_tsan = unittest.skipIf(use_tsan, reason) + + return cpython_only(skip_if_tsan(internal)) def bigaddrspacetest(f): """Decorator for tests that fill the address space.""" diff --git a/Lib/test/test_io/test_memoryio.py b/Lib/test/test_io/test_memoryio.py index 423b99779bc6e7..59e0dc4435d1f3 100644 --- a/Lib/test/test_io/test_memoryio.py +++ b/Lib/test/test_io/test_memoryio.py @@ -754,6 +754,7 @@ def __buffer__(self, flags): self.assertEqual(memio.getvalue(), b"01AAA56789") self.assertEqual(memio.tell(), 5) + @support.nomemtest def test_memory_error(self): # gh-157242: io.BytesIO() must not close the file on MemoryError _testcapi = import_helper.import_module('_testcapi')