Repository navigation
PyEval_AcquireLock() and PyEval_AcquireThread() do not handle runtime finalization properly. #80656
Description
Activity
ericsnowcurrently commented
on Mar 29, 2019 MemberAuthorMore actionsDaemon threads keep running until they finish or until finalization starts. For the latter, there is a check right after the thread acquires the GIL which causes the thread to exit if runtime finalization has started. [1] However, there are functions in the C-API that facilitate acquiring the GIL, but do not cause the thread to exit during finalization:
PyEval_AcquireLock() PyEval_AcquireThread()
Daemon threads that acquire the GIL through these can cause a deadlock during finalization. (See issue bpo-36469.) They should probably be updated to match what PyEval_RestoreThread() does.
[1] see PyEval_RestoreThread() and the eval loop, in PyEval_EvalFrameEx()
- added3.7 (EOL)end of lifeend of life3.8 (EOL)end of lifeend of lifetype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or errorinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)
on Mar 29, 2019 @eric.snow , you can review the PR I submitted for this.
@eric do we need any tests for this?
I am not comfortable to backport this change to Python 3.7. It's too early to know how it will impact applications and how many complains we will get :-) If someone really wants to backport this scary change to 3.7, I would suggest to wait for 1 month after Python 3.8.0 final release.
I close the issue.
See bpo-36479 for the follow-up.
- added3.8 (EOL)end of lifeend of lifeand removed3.7 (EOL)end of lifeend of life3.8 (EOL)end of lifeend of life
on Apr 29, 2019 I marked bpo-23592 as duplicate of this issue.
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields: