Commit 6a759d9e authored by Martin v. Löwis's avatar Martin v. Löwis

Remove appartment check from dooneevent. Fixes #660961.

Check whether self is NULL in mainloop.
parent adf64203
...@@ -2416,10 +2416,20 @@ Tkapp_MainLoop(PyObject *_self, PyObject *args) ...@@ -2416,10 +2416,20 @@ Tkapp_MainLoop(PyObject *_self, PyObject *args)
if (!PyArg_ParseTuple(args, "|i:mainloop", &threshold)) if (!PyArg_ParseTuple(args, "|i:mainloop", &threshold))
return NULL; 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; quitMainLoop = 0;
self->dispatching = 1;
while (Tk_GetNumMainWindows() > threshold && while (Tk_GetNumMainWindows() > threshold &&
!quitMainLoop && !quitMainLoop &&
!errorInCmd) !errorInCmd)
...@@ -2427,7 +2437,7 @@ Tkapp_MainLoop(PyObject *_self, PyObject *args) ...@@ -2427,7 +2437,7 @@ Tkapp_MainLoop(PyObject *_self, PyObject *args)
int result; int result;
#ifdef WITH_THREAD #ifdef WITH_THREAD
if (self->threaded) { if (self && self->threaded) {
/* Allow other Python threads to run. */ /* Allow other Python threads to run. */
ENTER_TCL ENTER_TCL
result = Tcl_DoOneEvent(0); result = Tcl_DoOneEvent(0);
...@@ -2449,13 +2459,15 @@ Tkapp_MainLoop(PyObject *_self, PyObject *args) ...@@ -2449,13 +2459,15 @@ Tkapp_MainLoop(PyObject *_self, PyObject *args)
#endif #endif
if (PyErr_CheckSignals() != 0) { if (PyErr_CheckSignals() != 0) {
self->dispatching = 0; if (self)
self->dispatching = 0;
return NULL; return NULL;
} }
if (result < 0) if (result < 0)
break; break;
} }
self->dispatching = 0; if (self)
self->dispatching = 0;
quitMainLoop = 0; quitMainLoop = 0;
if (errorInCmd) { if (errorInCmd) {
...@@ -2476,7 +2488,6 @@ Tkapp_DoOneEvent(PyObject *self, PyObject *args) ...@@ -2476,7 +2488,6 @@ Tkapp_DoOneEvent(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "|i:dooneevent", &flags)) if (!PyArg_ParseTuple(args, "|i:dooneevent", &flags))
return NULL; return NULL;
CHECK_TCL_APPARTMENT;
ENTER_TCL ENTER_TCL
rv = Tcl_DoOneEvent(flags); rv = Tcl_DoOneEvent(flags);
......
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