summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_tkinter.c35
1 files changed, 29 insertions, 6 deletions
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 4056bcd..b4031db 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -734,6 +734,7 @@ Tkapp_New(char *screenName, char *baseName, char *className,
}
+#ifdef WITH_THREAD
static void
Tkapp_ThreadSend(TkappObject *self, Tcl_Event *ev,
Tcl_Condition *cond, Tcl_Mutex *mutex)
@@ -746,6 +747,7 @@ Tkapp_ThreadSend(TkappObject *self, Tcl_Event *ev,
Tcl_MutexUnlock(mutex);
Py_END_ALLOW_THREADS
}
+#endif
/** Tcl Eval **/
@@ -1135,8 +1137,8 @@ FromObj(PyObject* tkapp, Tcl_Obj *value)
return newPyTclObject(value);
}
+#ifdef WITH_THREAD
/* This mutex synchronizes inter-thread command calls. */
-
TCL_DECLARE_MUTEX(call_mutex)
typedef struct Tkapp_CallEvent {
@@ -1148,6 +1150,7 @@ typedef struct Tkapp_CallEvent {
PyObject **exc_type, **exc_value, **exc_tb;
Tcl_Condition *done;
} Tkapp_CallEvent;
+#endif
void
Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, int objc)
@@ -1258,6 +1261,8 @@ Tkapp_CallResult(TkappObject *self)
return res;
}
+#ifdef WITH_THREAD
+
/* Tkapp_CallProc is the event procedure that is executed in the context of
the Tcl interpreter thread. Initially, it holds the Tcl lock, and doesn't
hold the Python lock. */
@@ -1302,6 +1307,8 @@ done:
return 1;
}
+#endif
+
/* This is the main entry point for calling a Tcl command.
It supports three cases, with regard to threading:
1. Tcl is not threaded: Must have the Tcl lock, then can invoke command in
@@ -1531,9 +1538,11 @@ Tkapp_AddErrorInfo(PyObject *self, PyObject *args)
/** Tcl Variable **/
+typedef PyObject* (*EventFunc)(PyObject*, PyObject *args, int flags);
+
+#ifdef WITH_THREAD
TCL_DECLARE_MUTEX(var_mutex)
-typedef PyObject* (*EventFunc)(PyObject*, PyObject *args, int flags);
typedef struct VarEvent {
Tcl_Event ev; /* must be first */
PyObject *self;
@@ -1545,6 +1554,7 @@ typedef struct VarEvent {
PyObject **exc_val;
Tcl_Condition *cond;
} VarEvent;
+#endif
static int
varname_converter(PyObject *in, void *_out)
@@ -1562,6 +1572,8 @@ varname_converter(PyObject *in, void *_out)
return 0;
}
+#ifdef WITH_THREAD
+
static void
var_perform(VarEvent *ev)
{
@@ -1589,11 +1601,13 @@ var_proc(VarEvent* ev, int flags)
return 1;
}
+#endif
+
static PyObject*
var_invoke(EventFunc func, PyObject *selfptr, PyObject *args, int flags)
{
- TkappObject *self = (TkappObject*)selfptr;
#ifdef WITH_THREAD
+ TkappObject *self = (TkappObject*)selfptr;
if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) {
TkappObject *self = (TkappObject*)selfptr;
VarEvent *ev;
@@ -2096,6 +2110,7 @@ PythonCmdDelete(ClientData clientData)
+#ifdef WITH_THREAD
TCL_DECLARE_MUTEX(command_mutex)
typedef struct CommandEvent{
@@ -2122,6 +2137,7 @@ Tkapp_CommandProc(CommandEvent *ev, int flags)
Tcl_MutexUnlock(&command_mutex);
return 1;
}
+#endif
static PyObject *
Tkapp_CreateCommand(PyObject *selfptr, PyObject *args)
@@ -2152,7 +2168,8 @@ Tkapp_CreateCommand(PyObject *selfptr, PyObject *args)
Py_INCREF(func);
data->self = selfptr;
data->func = func;
-
+
+#ifdef WITH_THREAD
if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) {
Tcl_Condition cond = NULL;
CommandEvent *ev = (CommandEvent*)ckalloc(sizeof(CommandEvent));
@@ -2166,7 +2183,9 @@ Tkapp_CreateCommand(PyObject *selfptr, PyObject *args)
Tkapp_ThreadSend(self, (Tcl_Event*)ev, &cond, &command_mutex);
Tcl_ConditionFinalize(&cond);
}
- else {
+ else
+#endif
+ {
ENTER_TCL
err = Tcl_CreateCommand(
Tkapp_Interp(self), cmdName, PythonCmd,
@@ -2194,6 +2213,8 @@ Tkapp_DeleteCommand(PyObject *selfptr, PyObject *args)
if (!PyArg_ParseTuple(args, "s:deletecommand", &cmdName))
return NULL;
+
+#ifdef WITH_THREAD
if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) {
Tcl_Condition cond = NULL;
CommandEvent *ev;
@@ -2208,7 +2229,9 @@ Tkapp_DeleteCommand(PyObject *selfptr, PyObject *args)
&command_mutex);
Tcl_ConditionFinalize(&cond);
}
- else {
+ else
+#endif
+ {
ENTER_TCL
err = Tcl_DeleteCommand(self->interp, cmdName);
LEAVE_TCL