diff options
author | Victor Stinner <vstinner@redhat.com> | 2019-04-29 11:04:07 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-29 11:04:07 (GMT) |
commit | 99fcc616d400cd31af0733c3f8cc93bcc1d32a44 (patch) | |
tree | 0081a47a3cae0a556affff285079a9361c5b8c45 /Python | |
parent | b36e5d627d4232a01850707eb78a5067f3fd77f4 (diff) | |
download | cpython-99fcc616d400cd31af0733c3f8cc93bcc1d32a44.zip cpython-99fcc616d400cd31af0733c3f8cc93bcc1d32a44.tar.gz cpython-99fcc616d400cd31af0733c3f8cc93bcc1d32a44.tar.bz2 |
Revert "bpo-36356: Destroy the GIL at exit (GH-12453)" (GH613006)
This reverts commit b36e5d627d4232a01850707eb78a5067f3fd77f4.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/ceval.c | 16 | ||||
-rw-r--r-- | Python/pylifecycle.c | 11 |
2 files changed, 10 insertions, 17 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index 5480fba..ccd0427 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -188,26 +188,20 @@ PyEval_InitThreads(void) } } - void _PyEval_FiniThreads(void) { - if (_PyRuntime.ceval.pending.lock != NULL) { - PyThread_free_lock(_PyRuntime.ceval.pending.lock); - _PyRuntime.ceval.pending.lock = NULL; - } -} - - -void -_PyEval_FiniThreads2(void) -{ if (!gil_created()) { return; } destroy_gil(); assert(!gil_created()); + + if (_PyRuntime.ceval.pending.lock != NULL) { + PyThread_free_lock(_PyRuntime.ceval.pending.lock); + _PyRuntime.ceval.pending.lock = NULL; + } } static inline void diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 0836e18..d93fe06 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -4,9 +4,8 @@ #include "Python-ast.h" #undef Yield /* undefine macro conflicting with <winbase.h> */ -#include "pycore_ceval.h" /* _PyEval_FiniThreads() */ -#include "pycore_context.h" #include "pycore_coreconfig.h" +#include "pycore_context.h" #include "pycore_fileutils.h" #include "pycore_hamt.h" #include "pycore_pathconfig.h" @@ -556,11 +555,12 @@ pycore_create_interpreter(_PyRuntimeState *runtime, return _Py_INIT_ERR("can't make first thread"); (void) PyThreadState_Swap(tstate); - /* Destroying the GIL in Py_FinalizeEx might fail when it is being - referenced from another running thread (see bpo-9901). + /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because + destroying the GIL might fail when it is being referenced from + another running thread (see issue #9901). Instead we destroy the previously created GIL here, which ensures that we can call Py_Initialize / Py_FinalizeEx multiple times. */ - _PyEval_FiniThreads2(); + _PyEval_FiniThreads(); /* Auto-thread-state API */ _PyGILState_Init(runtime, interp, tstate); @@ -1357,7 +1357,6 @@ Py_FinalizeEx(void) call_ll_exitfuncs(runtime); - _PyEval_FiniThreads(); _PyRuntime_Finalize(); return status; } |