Message365173
| Author |
vstinner |
| Recipients |
vstinner |
| Date |
2020年03月27日.17:16:55 |
| SpamBayes Score |
-1.0 |
| Marked as misclassified |
Yes |
| Message-id |
<1585329415.65.0.534969367772.issue40092@roundup.psfhosted.org> |
| In-reply-to |
| Content |
At fork, Python calls PyOS_AfterFork_Child() in the child process which indirectly calls _PyThreadState_DeleteExcept() whichs calls release_sentinel() of the thread which releases the thread state lock (threading.Thread._tstate_lock).
Problem: using a lock after fork is unsafe and can crash.
That's exactly what happens randomly on AIX when stressing ThreadJoinOnShutdown.test_reinit_tls_after_fork() of test_threading:
https://bugs.python.org/issue40068#msg365031
There are different options to solve this issue:
* Reset _tstate_lock before using it... not sure that it's worth it, since we are going to delete the threading.Thread object with its _tstate_lock object anymore. After calling fork, the child process has exactly 1 thread: all other threads have been removed.
* Modify release_sentinel() to not use the lock: avoid PyThread_release_lock() call. |
|
History
|
|---|
| Date |
User |
Action |
Args |
| 2020年03月27日 17:16:55 | vstinner | set | recipients:
+ vstinner |
| 2020年03月27日 17:16:55 | vstinner | set | messageid: <1585329415.65.0.534969367772.issue40092@roundup.psfhosted.org> |
| 2020年03月27日 17:16:55 | vstinner | link | issue40092 messages |
| 2020年03月27日 17:16:55 | vstinner | create |
|