[Python-checkins] r53249 - in python/trunk: Lib/threading.py Misc/NEWS Modules/main.c
Thomas Heller
theller at ctypes.org
Fri Jan 5 11:04:21 CET 2007
martin.v.loewis schrieb:
> Modified: python/trunk/Modules/main.c
> ==============================================================================
> --- python/trunk/Modules/main.c (original)
> +++ python/trunk/Modules/main.c Thu Jan 4 22:06:12 2007
> @@ -177,6 +177,33 @@
> return 0;
> }
>
> +/* Wait until threading._shutdown completes, provided
> + the threading module was imported in the first place.
> + The shutdown routine will wait until all non-daemon
> + "threading" threads have completed. */
> +#include "abstract.h"
> +static void
> +WaitForThreadShutdown()
> +{
> +#ifdef WITH_THREAD
> + PyObject *result;
> + PyThreadState *tstate = PyThreadState_GET();
> + PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
> + "threading");
> + if (threading == NULL) {
> + /* threading not imported */
> + PyErr_Clear();
> + return;
> + }
> + result = PyObject_CallMethod(threading, "_shutdown", "");
> + if (result == NULL)
> + PyErr_WriteUnraisable(threading);
> + else
> + Py_DECREF(result);
> + Py_DECREF(threading);
> +#endif
> +}
> +
> /* Main program */
>
> int
> @@ -514,6 +541,8 @@
> /* XXX */
> sts = PyRun_AnyFileFlags(stdin, "<stdin>", &cf) != 0;
>
> + WaitForThreadShutdown();
> +
> Py_Finalize();
> #ifdef RISCOS
> if (Py_RISCOSWimpFlag)
Does this mean that programs embedding Python (providing their own Py_Main function)
have to implement a WaitForThreadShutdown() function and call it themselves, before
calling Py_Finalize()? Wouldn't it be better to wait in Py_Finalize()?
Thanks,
Thomas
More information about the Python-checkins
mailing list