Commit 987a0dcf authored by Victor Stinner's avatar Victor Stinner Committed by GitHub

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.".
parent 7821b4c6
...@@ -223,21 +223,6 @@ Importing Modules ...@@ -223,21 +223,6 @@ Importing Modules
Return a new reference to the finder object. 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) .. c:function:: int PyImport_ImportFrozenModuleObject(PyObject *name)
Load a frozen module named *name*. Return ``1`` for success, ``0`` if the Load a frozen module named *name*. Return ``1`` for success, ``0`` if the
......
...@@ -122,6 +122,9 @@ Deprecated ...@@ -122,6 +122,9 @@ Deprecated
Removed 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 * ``_dummy_thread`` and ``dummy_threading`` modules have been removed. These
modules were deprecated since Python 3.7 which requires threading support. modules were deprecated since Python 3.7 which requires threading support.
(Contributed by Victor Stinner in :issue:`37312`.) (Contributed by Victor Stinner in :issue:`37312`.)
......
...@@ -72,7 +72,6 @@ PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject( ...@@ -72,7 +72,6 @@ PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject(
PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path); PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path);
PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name); PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name);
PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m); PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m);
PyAPI_FUNC(void) PyImport_Cleanup(void);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
PyAPI_FUNC(int) PyImport_ImportFrozenModuleObject( PyAPI_FUNC(int) PyImport_ImportFrozenModuleObject(
PyObject *name PyObject *name
......
...@@ -11,6 +11,7 @@ PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin( ...@@ -11,6 +11,7 @@ PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin(
); );
extern void _PyImport_ReInitLock(void); extern void _PyImport_ReInitLock(void);
extern void _PyImport_Cleanup(PyThreadState *tstate);
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -413,9 +413,8 @@ static const char * const sys_files[] = { ...@@ -413,9 +413,8 @@ static const char * const sys_files[] = {
/* Un-initialize things, as good as we can */ /* Un-initialize things, as good as we can */
void void
PyImport_Cleanup(void) _PyImport_Cleanup(PyThreadState *tstate)
{ {
PyThreadState *tstate = _PyThreadState_GET();
PyInterpreterState *interp = tstate->interp; PyInterpreterState *interp = tstate->interp;
PyObject *modules = interp->modules; PyObject *modules = interp->modules;
if (modules == NULL) { if (modules == NULL) {
......
...@@ -1225,7 +1225,7 @@ Py_FinalizeEx(void) ...@@ -1225,7 +1225,7 @@ Py_FinalizeEx(void)
_PySys_ClearAuditHooks(); _PySys_ClearAuditHooks();
/* Destroy all modules */ /* Destroy all modules */
PyImport_Cleanup(); _PyImport_Cleanup(tstate);
/* Print debug stats if any */ /* Print debug stats if any */
_PyEval_Fini(); _PyEval_Fini();
...@@ -1589,7 +1589,7 @@ Py_EndInterpreter(PyThreadState *tstate) ...@@ -1589,7 +1589,7 @@ Py_EndInterpreter(PyThreadState *tstate)
if (tstate != interp->tstate_head || tstate->next != NULL) if (tstate != interp->tstate_head || tstate->next != NULL)
Py_FatalError("Py_EndInterpreter: not the last thread"); Py_FatalError("Py_EndInterpreter: not the last thread");
PyImport_Cleanup(); _PyImport_Cleanup(tstate);
PyInterpreterState_Clear(interp); PyInterpreterState_Clear(interp);
PyThreadState_Swap(NULL); PyThreadState_Swap(NULL);
PyInterpreterState_Delete(interp); PyInterpreterState_Delete(interp);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment