Fix bug 683658 - PyErr_Warn may cause import deadlock.
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 1faab50..2845d24 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -60,6 +60,11 @@
   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 @@
 
 	_PyImportHooks_Init();
 
+	PyModule_WarningsModule = PyImport_ImportModule("warnings");
+
 	initsigs(); /* Signal handling stuff, including initintr() */
 
 	initmain(); /* Module __main__ */
@@ -225,6 +232,10 @@
 	/* Cleanup Codec registry */
 	_PyCodecRegistry_Fini();
 
+	/* drop module references we saved */
+	Py_XDECREF(PyModule_WarningsModule);
+	PyModule_WarningsModule = NULL;
+
 	/* Destroy all modules */
 	PyImport_Cleanup();