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

gh-104341: Wait Completely at threading._shutdown() #104672

Conversation

ericsnowcurrently
Copy link
Member

@ericsnowcurrently ericsnowcurrently commented May 19, 2023

(This should solve the semi-frequent buildbot failures we've been seeing.)

In Py_EndInterpreter() we almost immediately wait for all non-daemon Python threads to finish, by calling theading._shutdown(). However, with a per-interpreter GIL there's a race because threading._shutdown() doesn't wait long enough. This change fixes that by making sure _PyThreadState_DeleteCurrent() completely finishes before releasing the lock on which threading._shutdown() depends.

The gist of it is that we release that lock (and clean it up) later than we would normally be able to, by doing the cleanup in another thread via a "pending" call.

This isn't an ideal solution, but other approaches I tried involved more invasive changes, which I'd like to avoid this close to the beta 1 release.

@ericsnowcurrently
Copy link
Member Author

I plan on revisiting this problem, to introduce a better long-term solution. However, that probably won't be in 3.12.

@ericsnowcurrently ericsnowcurrently force-pushed the fix-threading-module-shutdown-simpler branch from 6c79a9b to 8b42a15 Compare May 23, 2023 21:00
@ericsnowcurrently ericsnowcurrently marked this pull request as ready for review May 23, 2023 21:01
@markshannon
Copy link
Member

Ae you still going with this, or has it been superseded?

@ericsnowcurrently
Copy link
Member Author

It's superseded for the moment. I'm likely to revisit this for 3.13.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants