Commit e8432ac4 authored by Guido van Rossum's avatar Guido van Rossum

Upon exit, flush stdout and stderr (twice: before and after the code that

attempts to delete all modules).  This makes test_subprocess work again.
(I can't quite figure out why stdout/stderr don't get deleted properly,
which would flush them anyway, but that's a separate issue.)
parent 5ed033b5
......@@ -291,6 +291,32 @@ Py_Initialize(void)
extern void dump_counts(FILE*);
#endif
/* Flush stdout and stderr */
void
flush_std_files()
{
PyObject *fout = PySys_GetObject("stdout");
PyObject *ferr = PySys_GetObject("stderr");
PyObject *tmp;
if (fout != NULL) {
tmp = PyObject_CallMethod(fout, "flush", "");
if (tmp == NULL)
PyErr_Clear();
else
Py_DECREF(tmp);
}
if (ferr != NULL) {
tmp = PyObject_CallMethod(ferr, "flush", "");
if (tmp == NULL)
PyErr_Clear();
else
Py_DECREF(tmp);
}
}
/* Undo the effect of Py_Initialize().
Beware: if multiple interpreter and/or thread states exist, these
......@@ -326,6 +352,9 @@ Py_Finalize(void)
call_py_exitfuncs();
initialized = 0;
/* Flush stdout+stderr */
flush_std_files();
/* Get current thread state and interpreter pointer */
tstate = PyThreadState_GET();
interp = tstate->interp;
......@@ -361,6 +390,9 @@ Py_Finalize(void)
/* Destroy all modules */
PyImport_Cleanup();
/* Flush stdout+stderr (again, in case more was printed) */
flush_std_files();
/* Collect final garbage. This disposes of cycles created by
* new-style class definitions, for example.
* XXX This is disabled because it caused too many problems. If
......
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