[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