From a43fd0c8996eec2bdd0ec59edc252cb4f4ff4436 Mon Sep 17 00:00:00 2001 From: Mark Hammond Date: Wed, 19 Feb 2003 00:33:33 +0000 Subject: Fix bug 683658 - PyErr_Warn may cause import deadlock. --- Python/pythonrun.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'Python/pythonrun.c') diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 1faab509ba..2845d24295 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -60,6 +60,11 @@ int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */ true divisions (which they will be in 2.3). */ int _Py_QnewFlag = 0; +/* Reference to 'warnings' module, to avoid importing it + on the fly when the import lock may be held. See 683658 +*/ +PyObject *PyModule_WarningsModule = NULL; + static int initialized = 0; /* API to access the initialized flag -- useful for esoteric use */ @@ -169,6 +174,8 @@ Py_Initialize(void) _PyImportHooks_Init(); + PyModule_WarningsModule = PyImport_ImportModule("warnings"); + initsigs(); /* Signal handling stuff, including initintr() */ initmain(); /* Module __main__ */ @@ -225,6 +232,10 @@ Py_Finalize(void) /* Cleanup Codec registry */ _PyCodecRegistry_Fini(); + /* drop module references we saved */ + Py_XDECREF(PyModule_WarningsModule); + PyModule_WarningsModule = NULL; + /* Destroy all modules */ PyImport_Cleanup(); -- cgit v1.2.1