Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make the Python test suite pass with the GIL disabled #116749

Closed
colesbury opened this issue Mar 13, 2024 · 2 comments
Closed

Make the Python test suite pass with the GIL disabled #116749

colesbury opened this issue Mar 13, 2024 · 2 comments
Labels
topic-free-threading type-feature A feature request or enhancement

Comments

@colesbury
Copy link
Contributor

colesbury commented Mar 13, 2024

Feature or enhancement

This issue is to track the remaining bugs that prevent the Python test suite from passing with the GIL disabled, as well as the PRs under review that fix known issues.

Note that this is not intended to cover all free-threading related issues: some thread-safety issues don't result in tests crashing or failing and are not tracked here. This is intended to cover the minimum set of changes needed to ensure that the test suite passes reliably with the GIL disabled.

PRs

Integration branch

Branches to merge
git merge disable-gil-default &&
git merge gh-112075-lock-split-keys &&
git merge gh-117783-immortalize

This branch contains the merge of the above PRs and is used to find bugs that are not covered by outstanding PRs. Note that setting PYTHON_GIL=0 isn't sufficient because some tests do not propagate the environment variable to tests in subprocesses. Instead, the branch changes the default mode to disable the GIL for testing purposes.

Issues without PRs that fix them

  • N/A

Bugs without issues

Windows

Linux

macOS

https://buildbot.python.org/all/#/builders/1367/builds/119/steps/5/logs/stdio

  • test_daemon_threads_shutdown_stderr_deadlock - Assertion failed: (tstate == NULL || tstate->interp == interp), function _PyEval_ReleaseLock, file ceval_gil.c,
  • test_queue test_shutdown_all_methods_in_many_threads - AttributeError: 'Queue' object has no attribute '_lock'
test_shutdown_all_methods_in_many_threads (test.test_queue.CQueueTest.test_shutdown_all_methods_in_many_threads) ... Warning -- Uncaught thread exception: AttributeError
Exception in thread Thread-2081 (_read_msg_thread):
Traceback (most recent call last):
  File "/Users/ec2-user/buildbot/buildarea/pull_request.itamaro-macos-arm64-aws.macos-with-brew.refleak.nogil/build/Lib/threading.py", line 1039, in _bootstrap_inner
    self.run()
    ~~~~~~~~^^
  File "/Users/ec2-user/buildbot/buildarea/pull_request.itamaro-macos-arm64-aws.macos-with-brew.refleak.nogil/build/Lib/threading.py", line 990, in run
    self._target(*self._args, **self._kwargs)
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ec2-user/buildbot/buildarea/pull_request.itamaro-macos-arm64-aws.macos-with-brew.refleak.nogil/build/Lib/test/test_queue.py", line 352, in _read_msg_thread
    q.get(False)
    ~~~~~^^^^^^^
  File "/Users/ec2-user/buildbot/buildarea/pull_request.itamaro-macos-arm64-aws.macos-with-brew.refleak.nogil/build/Lib/queue.py", line 216, in get
    item = self._get()
           ~~~~~~~~~^^
  File "/Users/ec2-user/buildbot/buildarea/pull_request.itamaro-macos-arm64-aws.macos-with-brew.refleak.nogil/build/Lib/threading.py", line 304, in __enter__
    return self._lock.__enter__()
           ^^^^^^^^^^
AttributeError: 'Queue' object has no attribute '_lock'

Old bugs?

  • test.test_smtpnet.SmtpSSLTest.test_connect_default_port connection closed (possibly related)
  • test.test_multiprocessing_forkserver.test_processes hangs ?

Linked PRs

@tonybaloney
Copy link
Contributor

Partly related: #112677 which tests inside a sub interpreter (with each test having an isolated GIL).

colesbury added a commit to colesbury/cpython that referenced this issue Apr 25, 2024
Switch GIL to disabled by default in free-threaded build so that the
free-threaded CIs catch thread-safety issues.
colesbury added a commit that referenced this issue Apr 26, 2024
Switch GIL to disabled by default in free-threaded build so that the
free-threaded CIs catch thread-safety issues.
@colesbury
Copy link
Contributor Author

The relevant PRs are merged, so I'm closing this now.

We'll open new issues for bugs/crashes as they pop up.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
topic-free-threading type-feature A feature request or enhancement
Projects
None yet
Development

No branches or pull requests

2 participants