summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_importlib/test_threaded_import.py
diff options
context:
space:
mode:
authorBrett Simmers <swtaarrs@users.noreply.github.com>2024-05-23 20:59:35 (GMT)
committerGitHub <noreply@github.com>2024-05-23 20:59:35 (GMT)
commitbe1dfccdf2c5c7671b8a549e969b8cf7d60d9936 (patch)
tree920d35829b0fb8d51399ff69760998165da704cb /Lib/test/test_importlib/test_threaded_import.py
parentb30d30c747df2bf9f1614df8e76db2ffdb24fcd8 (diff)
downloadcpython-be1dfccdf2c5c7671b8a549e969b8cf7d60d9936.zip
cpython-be1dfccdf2c5c7671b8a549e969b8cf7d60d9936.tar.gz
cpython-be1dfccdf2c5c7671b8a549e969b8cf7d60d9936.tar.bz2
gh-118727: Don't drop the GIL in `drop_gil()` unless the current thread holds it (#118745)
`drop_gil()` assumes that its caller is attached, which means that the current thread holds the GIL if and only if the GIL is enabled, and the enabled-state of the GIL won't change. This isn't true, though, because `detach_thread()` calls `_PyEval_ReleaseLock()` after detaching and `_PyThreadState_DeleteCurrent()` calls it after removing the current thread from consideration for stop-the-world requests (effectively detaching it). Fix this by remembering whether or not a thread acquired the GIL when it last attached, in `PyThreadState._status.holds_gil`, and check this in `drop_gil()` instead of `gil->enabled`. This fixes a crash in `test_multiprocessing_pool_circular_import()`, so I've reenabled it.
Diffstat (limited to 'Lib/test/test_importlib/test_threaded_import.py')
-rw-r--r--Lib/test/test_importlib/test_threaded_import.py5
1 files changed, 1 insertions, 4 deletions
diff --git a/Lib/test/test_importlib/test_threaded_import.py b/Lib/test/test_importlib/test_threaded_import.py
index 3477112..9af1e4d 100644
--- a/Lib/test/test_importlib/test_threaded_import.py
+++ b/Lib/test/test_importlib/test_threaded_import.py
@@ -17,7 +17,7 @@ from test import support
from test.support import verbose
from test.support.import_helper import forget, mock_register_at_fork
from test.support.os_helper import (TESTFN, unlink, rmtree)
-from test.support import script_helper, threading_helper, requires_gil_enabled
+from test.support import script_helper, threading_helper
threading_helper.requires_working_threading(module=True)
@@ -248,9 +248,6 @@ class ThreadedImportTests(unittest.TestCase):
'partial', 'cfimport.py')
script_helper.assert_python_ok(fn)
- # gh-118727 and gh-118729: pool_in_threads.py may crash in free-threaded
- # builds, which can hang the Tsan test so temporarily skip it for now.
- @requires_gil_enabled("gh-118727: test may crash in free-threaded builds")
def test_multiprocessing_pool_circular_import(self):
# Regression test for bpo-41567
fn = os.path.join(os.path.dirname(__file__),