Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
1972d162
Commit
1972d162
authored
Mar 27, 2009
by
Guilherme Polo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adjusted _tkinter to compile without warnings when WITH_THREAD is not
defined (part of issue #5035)
parent
7fa9459b
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
32 additions
and
6 deletions
+32
-6
Misc/NEWS
Misc/NEWS
+3
-0
Modules/_tkinter.c
Modules/_tkinter.c
+29
-6
No files found.
Misc/NEWS
View file @
1972d162
...
...
@@ -197,6 +197,9 @@ Core and Builtins
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
python_version() and python_version_tuple() since they produced different
output compared to previous Python versions.
...
...
Modules/_tkinter.c
View file @
1972d162
...
...
@@ -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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment