Kaydet (Commit) 3f5f8228 authored tarafından Guilherme Polo's avatar Guilherme Polo

Fix for issue #3638: Remove module level functions in _tkinter that

depend on TkappObject
üst 92ad63f7
...@@ -82,6 +82,9 @@ Core and Builtins ...@@ -82,6 +82,9 @@ Core and Builtins
Library Library
------- -------
- Issue #3638: Remove functions from _tkinter module level that depend on
TkappObject to work with multiple threads.
- Issue #4718: Adapt the wsgiref package so that it actually works with - Issue #4718: Adapt the wsgiref package so that it actually works with
Python 3.x, in accordance with the `official amendments of the spec Python 3.x, in accordance with the `official amendments of the spec
<http://www.wsgi.org/wsgi/Amendments_1.0>`_. <http://www.wsgi.org/wsgi/Amendments_1.0>`_.
......
...@@ -2171,19 +2171,7 @@ Tkapp_CreateFileHandler(PyObject *self, PyObject *args) ...@@ -2171,19 +2171,7 @@ Tkapp_CreateFileHandler(PyObject *self, PyObject *args)
&file, &mask, &func)) &file, &mask, &func))
return NULL; return NULL;
#ifdef WITH_THREAD CHECK_TCL_APPARTMENT;
if (!self && !tcl_lock) {
/* We don't have the Tcl lock since Tcl is threaded. */
PyErr_SetString(PyExc_RuntimeError,
"_tkinter.createfilehandler not supported "
"for threaded Tcl");
return NULL;
}
#endif
if (self) {
CHECK_TCL_APPARTMENT;
}
tfile = PyObject_AsFileDescriptor(file); tfile = PyObject_AsFileDescriptor(file);
if (tfile < 0) if (tfile < 0)
...@@ -2214,19 +2202,7 @@ Tkapp_DeleteFileHandler(PyObject *self, PyObject *args) ...@@ -2214,19 +2202,7 @@ Tkapp_DeleteFileHandler(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "O:deletefilehandler", &file)) if (!PyArg_ParseTuple(args, "O:deletefilehandler", &file))
return NULL; return NULL;
#ifdef WITH_THREAD CHECK_TCL_APPARTMENT;
if (!self && !tcl_lock) {
/* We don't have the Tcl lock since Tcl is threaded. */
PyErr_SetString(PyExc_RuntimeError,
"_tkinter.deletefilehandler not supported "
"for threaded Tcl");
return NULL;
}
#endif
if (self) {
CHECK_TCL_APPARTMENT;
}
tfile = PyObject_AsFileDescriptor(file); tfile = PyObject_AsFileDescriptor(file);
if (tfile < 0) if (tfile < 0)
...@@ -2400,19 +2376,7 @@ Tkapp_CreateTimerHandler(PyObject *self, PyObject *args) ...@@ -2400,19 +2376,7 @@ Tkapp_CreateTimerHandler(PyObject *self, PyObject *args)
return NULL; return NULL;
} }
#ifdef WITH_THREAD CHECK_TCL_APPARTMENT;
if (!self && !tcl_lock) {
/* We don't have the Tcl lock since Tcl is threaded. */
PyErr_SetString(PyExc_RuntimeError,
"_tkinter.createtimerhandler not supported "
"for threaded Tcl");
return NULL;
}
#endif
if (self) {
CHECK_TCL_APPARTMENT;
}
v = Tktt_New(func); v = Tktt_New(func);
if (v) { if (v) {
...@@ -2438,20 +2402,8 @@ Tkapp_MainLoop(PyObject *selfptr, PyObject *args) ...@@ -2438,20 +2402,8 @@ Tkapp_MainLoop(PyObject *selfptr, PyObject *args)
if (!PyArg_ParseTuple(args, "|i:mainloop", &threshold)) if (!PyArg_ParseTuple(args, "|i:mainloop", &threshold))
return NULL; return NULL;
#ifdef WITH_THREAD CHECK_TCL_APPARTMENT;
if (!self && !tcl_lock) { self->dispatching = 1;
/* We don't have the Tcl lock since Tcl is threaded. */
PyErr_SetString(PyExc_RuntimeError,
"_tkinter.mainloop not supported "
"for threaded Tcl");
return NULL;
}
#endif
if (self) {
CHECK_TCL_APPARTMENT;
self->dispatching = 1;
}
quitMainLoop = 0; quitMainLoop = 0;
while (Tk_GetNumMainWindows() > threshold && while (Tk_GetNumMainWindows() > threshold &&
...@@ -2461,7 +2413,7 @@ Tkapp_MainLoop(PyObject *selfptr, PyObject *args) ...@@ -2461,7 +2413,7 @@ Tkapp_MainLoop(PyObject *selfptr, PyObject *args)
int result; int result;
#ifdef WITH_THREAD #ifdef WITH_THREAD
if (self && self->threaded) { if (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);
...@@ -2483,15 +2435,13 @@ Tkapp_MainLoop(PyObject *selfptr, PyObject *args) ...@@ -2483,15 +2435,13 @@ Tkapp_MainLoop(PyObject *selfptr, PyObject *args)
#endif #endif
if (PyErr_CheckSignals() != 0) { if (PyErr_CheckSignals() != 0) {
if (self) self->dispatching = 0;
self->dispatching = 0;
return NULL; return NULL;
} }
if (result < 0) if (result < 0)
break; break;
} }
if (self) self->dispatching = 0;
self->dispatching = 0;
quitMainLoop = 0; quitMainLoop = 0;
if (errorInCmd) { if (errorInCmd) {
...@@ -2884,14 +2834,6 @@ static PyMethodDef moduleMethods[] = ...@@ -2884,14 +2834,6 @@ static PyMethodDef moduleMethods[] =
{ {
{"_flatten", Tkinter_Flatten, METH_VARARGS}, {"_flatten", Tkinter_Flatten, METH_VARARGS},
{"create", Tkinter_Create, METH_VARARGS}, {"create", Tkinter_Create, METH_VARARGS},
#ifdef HAVE_CREATEFILEHANDLER
{"createfilehandler", Tkapp_CreateFileHandler, METH_VARARGS},
{"deletefilehandler", Tkapp_DeleteFileHandler, METH_VARARGS},
#endif
{"createtimerhandler", Tkapp_CreateTimerHandler, METH_VARARGS},
{"mainloop", Tkapp_MainLoop, METH_VARARGS},
{"dooneevent", Tkapp_DoOneEvent, METH_VARARGS},
{"quit", Tkapp_Quit, METH_VARARGS},
{"setbusywaitinterval",Tkinter_setbusywaitinterval, METH_VARARGS, {"setbusywaitinterval",Tkinter_setbusywaitinterval, METH_VARARGS,
setbusywaitinterval_doc}, setbusywaitinterval_doc},
{"getbusywaitinterval",(PyCFunction)Tkinter_getbusywaitinterval, {"getbusywaitinterval",(PyCFunction)Tkinter_getbusywaitinterval,
......
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