From: Łukasz Langa Date: Tue, 23 May 2017 05:23:05 +0000 (-0700) Subject: [3.6] bpo-30395 _PyGILState_Reinit deadlock fix (GH-1734) (#1740) X-Git-Tag: v3.6.2rc1~134 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d29feccec3ce3dcd9ab3100f8956171c70ec3027;p=python [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 f82c951d1c5416f3550d544e50ff5662d3836e73) --- diff --git a/Misc/ACKS b/Misc/ACKS index 7109ccbe85..b8bac248d9 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -552,6 +552,7 @@ Eric Groo Daniel Andrade Groppe Dag Gruneau Filip Gruszczyński +Andrii Grynenko Grzegorz Grzywacz Thomas Guettler Yuyang Guo diff --git a/Python/pystate.c b/Python/pystate.c index 65c244e6f7..ccb0092c42 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -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)