From b36e5d627d4232a01850707eb78a5067f3fd77f4 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 29 Apr 2019 11:15:56 +0200 Subject: bpo-36356: Destroy the GIL at exit (GH-12453) * Add _PyEval_FiniThreads2(). _PyEval_FiniThreads() now only clears the pending lock, whereas _PyEval_FiniThreads2() destroys the GIL. * pymain_free() now calls _PyEval_FiniThreads2(). * Py_FinalizeEx() now calls _PyEval_FiniThreads(). --- Modules/main.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'Modules/main.c') diff --git a/Modules/main.c b/Modules/main.c index 68f0b99c9f..f77bbd2f41 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -1,6 +1,7 @@ /* Python interpreter main program */ #include "Python.h" +#include "pycore_ceval.h" /* _PyEval_FiniThreads2() */ #include "pycore_coreconfig.h" #include "pycore_pylifecycle.h" #include "pycore_pymem.h" @@ -525,15 +526,15 @@ done: /* --- pymain_main() ---------------------------------------------- */ +/* Free global variables which cannot be freed in Py_Finalize(): + configuration options set before Py_Initialize() which should + remain valid after Py_Finalize(), since + Py_Initialize()-Py_Finalize() can be called multiple times. */ static void pymain_free(void) { _PyImport_Fini2(); - - /* Free global variables which cannot be freed in Py_Finalize(): - configuration options set before Py_Initialize() which should - remain valid after Py_Finalize(), since - Py_Initialize()-Py_Finalize() can be called multiple times. */ + _PyEval_FiniThreads2(); _PyPathConfig_ClearGlobal(); _Py_ClearStandardStreamEncoding(); _Py_ClearArgcArgv(); -- cgit v1.2.1