| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
take_gil() is now responsible to exit the thread if Python is finalizing. Not only exit before trying to acquire the GIL, but exit also once the GIL is succesfully acquired.
|
@pitrou: My previous change introduced a race condition: https://bugs.python.org/issue39877#msg363667 This change should fix it. |
Sorry, something went wrong.
Sorry, something went wrong.
There was a problem hiding this comment.
I believe the fix is somehow incomplete, see below.
Also, as you say, the problem is "is it safe to destroy the GIL if there are still daemon threads trying to take it?".
Sorry, something went wrong.
|
|
||
| MUTEX_UNLOCK(gil->mutex); | ||
|
|
||
| if (thread_must_exit(tstate)) { |
There was a problem hiding this comment.
I'm not sure why you're doing this here. It doesn't seem necessary and, furthermore, it's unlikely to trigger.
Sorry, something went wrong.
There was a problem hiding this comment.
This code path is to prevent https://bugs.python.org/issue39877#msg363667 crash. Are you suggesting to move this code at line 249, after COND_TIMED_WAIT()?
thread_must_exit() at entry is to prevent https://bugs.python.org/issue39877#msg363512 crash.
Sorry, something went wrong.
| { | ||
| int err = errno; | ||
|
|
||
| if (thread_must_exit(tstate)) { |
There was a problem hiding this comment.
Ok, but shouldn't you do this after COND_TIMED_WAIT below as well?
Sorry, something went wrong.
|
When you're done making the requested changes, leave the comment: I have made the requested changes; please review again. |
Sorry, something went wrong.
| to run after wait_for_thread_shutdown() and before Py_Finalize() | ||
| completes. For example, when _PyImport_Cleanup() executes Python | ||
| code. */ | ||
| MUTEX_UNLOCK(gil->mutex); |
There was a problem hiding this comment.
I'm not sure if anyone else should be done here.
Sorry, something went wrong.
There was a problem hiding this comment.
For example, is COND_SIGNAL(gil->cond) needed to wake up the next thread waiting on COND_TIMED_WAIT()?
Sorry, something went wrong.
|
I have made the requested changes; please review again. |
Sorry, something went wrong.
|
Thanks for making the requested changes! @pitrou: please review the changes made to this pull request. |
Sorry, something went wrong.
|
I merged PR #18890 which checks if the thread must exit at function exit as well. In short, it restores the Python 3.8 behavior. I close this PR for now. We can revisit take_gil() later to try to adjust/optimize it later. I prefer to move step by step. |
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
take_gil() is now responsible to exit the thread if Python is
finalizing. Not only exit before trying to acquire the GIL, but exit
also once the GIL is succesfully acquired.
https://bugs.python.org/issue39877