From: Victor Stinner Date: Wed, 19 Jun 2019 08:36:10 +0000 (+0200) Subject: bpo-36710: Remove PyImport_Cleanup() function (GH-14221) X-Git-Tag: v3.9.0a1~1224 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=987a0dcfa1302df6c1ed8cf14762dc18628e3f33;p=thirdparty%2FPython%2Fcpython.git bpo-36710: Remove PyImport_Cleanup() function (GH-14221) * Rename PyImport_Cleanup() to _PyImport_Cleanup() and move it to the internal C API. Add 'tstate' parameters. * Remove documentation of _PyImport_Init(), PyImport_Cleanup(), _PyImport_Fini(). All three were documented as "For internal use only.". --- diff --git a/Doc/c-api/import.rst b/Doc/c-api/import.rst index 86cc4031610b..3bc50609714a 100644 --- a/Doc/c-api/import.rst +++ b/Doc/c-api/import.rst @@ -223,21 +223,6 @@ Importing Modules Return a new reference to the finder object. -.. c:function:: void _PyImport_Init() - - Initialize the import mechanism. For internal use only. - - -.. c:function:: void PyImport_Cleanup() - - Empty the module table. For internal use only. - - -.. c:function:: void _PyImport_Fini() - - Finalize the import mechanism. For internal use only. - - .. c:function:: int PyImport_ImportFrozenModuleObject(PyObject *name) Load a frozen module named *name*. Return ``1`` for success, ``0`` if the diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 446c8b9719e0..24fbe1870c87 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -122,6 +122,9 @@ Deprecated Removed ======= +* The C function ``PyImport_Cleanup()`` has been removed. It was documented as: + "Empty the module table. For internal use only." + * ``_dummy_thread`` and ``dummy_threading`` modules have been removed. These modules were deprecated since Python 3.7 which requires threading support. (Contributed by Victor Stinner in :issue:`37312`.) diff --git a/Include/import.h b/Include/import.h index c50767d904de..735533ee7a79 100644 --- a/Include/import.h +++ b/Include/import.h @@ -72,7 +72,6 @@ PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject( PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path); PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name); PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m); -PyAPI_FUNC(void) PyImport_Cleanup(void); #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 PyAPI_FUNC(int) PyImport_ImportFrozenModuleObject( PyObject *name diff --git a/Include/internal/pycore_import.h b/Include/internal/pycore_import.h index bbcd170ab135..5d3203e5b97f 100644 --- a/Include/internal/pycore_import.h +++ b/Include/internal/pycore_import.h @@ -11,6 +11,7 @@ PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin( ); extern void _PyImport_ReInitLock(void); +extern void _PyImport_Cleanup(PyThreadState *tstate); #ifdef __cplusplus } diff --git a/Python/import.c b/Python/import.c index 5606d3bea456..dc0d5b8b901c 100644 --- a/Python/import.c +++ b/Python/import.c @@ -413,9 +413,8 @@ static const char * const sys_files[] = { /* Un-initialize things, as good as we can */ void -PyImport_Cleanup(void) +_PyImport_Cleanup(PyThreadState *tstate) { - PyThreadState *tstate = _PyThreadState_GET(); PyInterpreterState *interp = tstate->interp; PyObject *modules = interp->modules; if (modules == NULL) { diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 4a97295102f7..c0b34507899f 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -1225,7 +1225,7 @@ Py_FinalizeEx(void) _PySys_ClearAuditHooks(); /* Destroy all modules */ - PyImport_Cleanup(); + _PyImport_Cleanup(tstate); /* Print debug stats if any */ _PyEval_Fini(); @@ -1589,7 +1589,7 @@ Py_EndInterpreter(PyThreadState *tstate) if (tstate != interp->tstate_head || tstate->next != NULL) Py_FatalError("Py_EndInterpreter: not the last thread"); - PyImport_Cleanup(); + _PyImport_Cleanup(tstate); PyInterpreterState_Clear(interp); PyThreadState_Swap(NULL); PyInterpreterState_Delete(interp);