From 6a759d9e00fdb0f0ac2eeb206849e0a2e138af87 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Sat, 4 Jan 2003 08:36:57 +0000 Subject: [PATCH] Remove appartment check from dooneevent. Fixes #660961. Check whether self is NULL in mainloop. --- Modules/_tkinter.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index c759a3a6f7..6ca6f17fd5 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -2416,10 +2416,20 @@ Tkapp_MainLoop(PyObject *_self, PyObject *args) if (!PyArg_ParseTuple(args, "|i:mainloop", &threshold)) return NULL; - CHECK_TCL_APPARTMENT; + if (!self && !tcl_lock) { + /* We don't have the Tcl lock since Tcl is threaded. */ + PyErr_SetString(PyExc_RuntimeError, + "_tkinter.mainloop not supported " + "for threaded Tcl"); + return NULL; + } + + if (self) { + CHECK_TCL_APPARTMENT; + self->dispatching = 1; + } quitMainLoop = 0; - self->dispatching = 1; while (Tk_GetNumMainWindows() > threshold && !quitMainLoop && !errorInCmd) @@ -2427,7 +2437,7 @@ Tkapp_MainLoop(PyObject *_self, PyObject *args) int result; #ifdef WITH_THREAD - if (self->threaded) { + if (self && self->threaded) { /* Allow other Python threads to run. */ ENTER_TCL result = Tcl_DoOneEvent(0); @@ -2449,13 +2459,15 @@ Tkapp_MainLoop(PyObject *_self, PyObject *args) #endif if (PyErr_CheckSignals() != 0) { - self->dispatching = 0; + if (self) + self->dispatching = 0; return NULL; } if (result < 0) break; } - self->dispatching = 0; + if (self) + self->dispatching = 0; quitMainLoop = 0; if (errorInCmd) { @@ -2476,7 +2488,6 @@ Tkapp_DoOneEvent(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, "|i:dooneevent", &flags)) return NULL; - CHECK_TCL_APPARTMENT; ENTER_TCL rv = Tcl_DoOneEvent(flags); -- 2.40.0