mirror of https://github.com/python/cpython.git
Adjusted _tkinter to compile without warnings when WITH_THREAD is not
defined (part of issue #5035)
This commit is contained in:
parent
7fa9459baf
commit
1972d16230
|
@ -197,6 +197,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Adjusted _tkinter to compile without warnings when WITH_THREAD is not
|
||||||
|
defined (part of issue #5035).
|
||||||
|
|
||||||
- Issue #5561: Removed the sys.version_info shortcuts from platform's
|
- Issue #5561: Removed the sys.version_info shortcuts from platform's
|
||||||
python_version() and python_version_tuple() since they produced different
|
python_version() and python_version_tuple() since they produced different
|
||||||
output compared to previous Python versions.
|
output compared to previous Python versions.
|
||||||
|
|
|
@ -734,6 +734,7 @@ Tkapp_New(char *screenName, char *baseName, char *className,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef WITH_THREAD
|
||||||
static void
|
static void
|
||||||
Tkapp_ThreadSend(TkappObject *self, Tcl_Event *ev,
|
Tkapp_ThreadSend(TkappObject *self, Tcl_Event *ev,
|
||||||
Tcl_Condition *cond, Tcl_Mutex *mutex)
|
Tcl_Condition *cond, Tcl_Mutex *mutex)
|
||||||
|
@ -746,6 +747,7 @@ Tkapp_ThreadSend(TkappObject *self, Tcl_Event *ev,
|
||||||
Tcl_MutexUnlock(mutex);
|
Tcl_MutexUnlock(mutex);
|
||||||
Py_END_ALLOW_THREADS
|
Py_END_ALLOW_THREADS
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/** Tcl Eval **/
|
/** Tcl Eval **/
|
||||||
|
@ -1135,8 +1137,8 @@ FromObj(PyObject* tkapp, Tcl_Obj *value)
|
||||||
return newPyTclObject(value);
|
return newPyTclObject(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WITH_THREAD
|
||||||
/* This mutex synchronizes inter-thread command calls. */
|
/* This mutex synchronizes inter-thread command calls. */
|
||||||
|
|
||||||
TCL_DECLARE_MUTEX(call_mutex)
|
TCL_DECLARE_MUTEX(call_mutex)
|
||||||
|
|
||||||
typedef struct Tkapp_CallEvent {
|
typedef struct Tkapp_CallEvent {
|
||||||
|
@ -1148,6 +1150,7 @@ typedef struct Tkapp_CallEvent {
|
||||||
PyObject **exc_type, **exc_value, **exc_tb;
|
PyObject **exc_type, **exc_value, **exc_tb;
|
||||||
Tcl_Condition *done;
|
Tcl_Condition *done;
|
||||||
} Tkapp_CallEvent;
|
} Tkapp_CallEvent;
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, int objc)
|
Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, int objc)
|
||||||
|
@ -1258,6 +1261,8 @@ Tkapp_CallResult(TkappObject *self)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WITH_THREAD
|
||||||
|
|
||||||
/* Tkapp_CallProc is the event procedure that is executed in the context of
|
/* 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
|
the Tcl interpreter thread. Initially, it holds the Tcl lock, and doesn't
|
||||||
hold the Python lock. */
|
hold the Python lock. */
|
||||||
|
@ -1302,6 +1307,8 @@ Tkapp_CallProc(Tkapp_CallEvent *e, int flags)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/* This is the main entry point for calling a Tcl command.
|
/* This is the main entry point for calling a Tcl command.
|
||||||
It supports three cases, with regard to threading:
|
It supports three cases, with regard to threading:
|
||||||
1. Tcl is not threaded: Must have the Tcl lock, then can invoke command in
|
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 **/
|
/** Tcl Variable **/
|
||||||
|
|
||||||
|
typedef PyObject* (*EventFunc)(PyObject*, PyObject *args, int flags);
|
||||||
|
|
||||||
|
#ifdef WITH_THREAD
|
||||||
TCL_DECLARE_MUTEX(var_mutex)
|
TCL_DECLARE_MUTEX(var_mutex)
|
||||||
|
|
||||||
typedef PyObject* (*EventFunc)(PyObject*, PyObject *args, int flags);
|
|
||||||
typedef struct VarEvent {
|
typedef struct VarEvent {
|
||||||
Tcl_Event ev; /* must be first */
|
Tcl_Event ev; /* must be first */
|
||||||
PyObject *self;
|
PyObject *self;
|
||||||
|
@ -1545,6 +1554,7 @@ typedef struct VarEvent {
|
||||||
PyObject **exc_val;
|
PyObject **exc_val;
|
||||||
Tcl_Condition *cond;
|
Tcl_Condition *cond;
|
||||||
} VarEvent;
|
} VarEvent;
|
||||||
|
#endif
|
||||||
|
|
||||||
static int
|
static int
|
||||||
varname_converter(PyObject *in, void *_out)
|
varname_converter(PyObject *in, void *_out)
|
||||||
|
@ -1562,6 +1572,8 @@ varname_converter(PyObject *in, void *_out)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WITH_THREAD
|
||||||
|
|
||||||
static void
|
static void
|
||||||
var_perform(VarEvent *ev)
|
var_perform(VarEvent *ev)
|
||||||
{
|
{
|
||||||
|
@ -1589,11 +1601,13 @@ var_proc(VarEvent* ev, int flags)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
var_invoke(EventFunc func, PyObject *selfptr, PyObject *args, int flags)
|
var_invoke(EventFunc func, PyObject *selfptr, PyObject *args, int flags)
|
||||||
{
|
{
|
||||||
TkappObject *self = (TkappObject*)selfptr;
|
|
||||||
#ifdef WITH_THREAD
|
#ifdef WITH_THREAD
|
||||||
|
TkappObject *self = (TkappObject*)selfptr;
|
||||||
if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) {
|
if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) {
|
||||||
TkappObject *self = (TkappObject*)selfptr;
|
TkappObject *self = (TkappObject*)selfptr;
|
||||||
VarEvent *ev;
|
VarEvent *ev;
|
||||||
|
@ -2096,6 +2110,7 @@ PythonCmdDelete(ClientData clientData)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef WITH_THREAD
|
||||||
TCL_DECLARE_MUTEX(command_mutex)
|
TCL_DECLARE_MUTEX(command_mutex)
|
||||||
|
|
||||||
typedef struct CommandEvent{
|
typedef struct CommandEvent{
|
||||||
|
@ -2122,6 +2137,7 @@ Tkapp_CommandProc(CommandEvent *ev, int flags)
|
||||||
Tcl_MutexUnlock(&command_mutex);
|
Tcl_MutexUnlock(&command_mutex);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
Tkapp_CreateCommand(PyObject *selfptr, PyObject *args)
|
Tkapp_CreateCommand(PyObject *selfptr, PyObject *args)
|
||||||
|
@ -2153,6 +2169,7 @@ Tkapp_CreateCommand(PyObject *selfptr, PyObject *args)
|
||||||
data->self = selfptr;
|
data->self = selfptr;
|
||||||
data->func = func;
|
data->func = func;
|
||||||
|
|
||||||
|
#ifdef WITH_THREAD
|
||||||
if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) {
|
if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) {
|
||||||
Tcl_Condition cond = NULL;
|
Tcl_Condition cond = NULL;
|
||||||
CommandEvent *ev = (CommandEvent*)ckalloc(sizeof(CommandEvent));
|
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);
|
Tkapp_ThreadSend(self, (Tcl_Event*)ev, &cond, &command_mutex);
|
||||||
Tcl_ConditionFinalize(&cond);
|
Tcl_ConditionFinalize(&cond);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
ENTER_TCL
|
ENTER_TCL
|
||||||
err = Tcl_CreateCommand(
|
err = Tcl_CreateCommand(
|
||||||
Tkapp_Interp(self), cmdName, PythonCmd,
|
Tkapp_Interp(self), cmdName, PythonCmd,
|
||||||
|
@ -2194,6 +2213,8 @@ Tkapp_DeleteCommand(PyObject *selfptr, PyObject *args)
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "s:deletecommand", &cmdName))
|
if (!PyArg_ParseTuple(args, "s:deletecommand", &cmdName))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
#ifdef WITH_THREAD
|
||||||
if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) {
|
if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) {
|
||||||
Tcl_Condition cond = NULL;
|
Tcl_Condition cond = NULL;
|
||||||
CommandEvent *ev;
|
CommandEvent *ev;
|
||||||
|
@ -2208,7 +2229,9 @@ Tkapp_DeleteCommand(PyObject *selfptr, PyObject *args)
|
||||||
&command_mutex);
|
&command_mutex);
|
||||||
Tcl_ConditionFinalize(&cond);
|
Tcl_ConditionFinalize(&cond);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
ENTER_TCL
|
ENTER_TCL
|
||||||
err = Tcl_DeleteCommand(self->interp, cmdName);
|
err = Tcl_DeleteCommand(self->interp, cmdName);
|
||||||
LEAVE_TCL
|
LEAVE_TCL
|
||||||
|
|
Loading…
Reference in New Issue