[3.6] bpo-30395 _PyGILState_Reinit deadlock fix (GH-1734) (#1740)

head_lock could be held by another thread when fork happened. We should
reset it to avoid deadlock.
(cherry picked from commit f82c951d1c)
This commit is contained in:
Łukasz Langa 2017-05-22 22:23:05 -07:00 committed by GitHub
parent 1398b1bc7d
commit d29feccec3
2 changed files with 5 additions and 0 deletions

View file

@ -552,6 +552,7 @@ Eric Groo
Daniel Andrade Groppe
Dag Gruneau
Filip Gruszczyński
Andrii Grynenko
Grzegorz Grzywacz
Thomas Guettler
Yuyang Guo

View file

@ -743,6 +743,10 @@ _PyGILState_Fini(void)
void
_PyGILState_Reinit(void)
{
#ifdef WITH_THREAD
head_mutex = NULL;
HEAD_INIT();
#endif
PyThreadState *tstate = PyGILState_GetThisThreadState();
PyThread_delete_key(autoTLSkey);
if ((autoTLSkey = PyThread_create_key()) == -1)