Skip to content

Commit bc95fb3

Browse files
committed
Don't release Tcl lock in Tcl custom commands
1 parent b642cac commit bc95fb3

File tree

1 file changed

+7
-21
lines changed

1 file changed

+7
-21
lines changed

Modules/_tkinter.c

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -264,18 +264,9 @@ if (tcl_lock){\
264264
tcl_tstate = NULL; RELEASE_TCL_LOCK; }
265265

266266
#define ENTER_PYTHON \
267-
{ PyThreadState *tstate = tcl_tstate; tcl_tstate = NULL; \
268-
RELEASE_TCL_LOCK; PyEval_RestoreThread((tstate)); }
269-
270-
#define LEAVE_PYTHON \
271-
{ PyThreadState *tstate = PyEval_SaveThread(); \
272-
ACQUIRE_TCL_LOCK;\
273-
tcl_tstate = tstate; }
274-
275-
#define ENTER_PYTHON_OVERLAP \
276267
{ PyThreadState *tstate = tcl_tstate; tcl_tstate = NULL; PyEval_RestoreThread((tstate)); }
277268

278-
#define LEAVE_PYTHON_OVERLAP \
269+
#define LEAVE_PYTHON \
279270
{ PyThreadState *tstate = PyEval_SaveThread(); tcl_tstate = tstate; }
280271

281272

@@ -297,8 +288,6 @@ if (tcl_lock){\
297288
#define LEAVE_OVERLAP_TCL
298289
#define ENTER_PYTHON
299290
#define LEAVE_PYTHON
300-
#define ENTER_PYTHON_OVERLAP
301-
#define LEAVE_PYTHON_OVERLAP
302291
#define CHECK_TCL_APPARTMENT
303292

304293
#endif
@@ -1601,17 +1590,17 @@ Tkapp_CallProc(Tkapp_CallEvent *e, int flags)
16011590
Tcl_Obj **objv;
16021591
int objc;
16031592
int i;
1604-
ENTER_PYTHON_OVERLAP
1593+
ENTER_PYTHON
16051594
objv = Tkapp_CallArgs(e->args, objStore, &objc);
16061595
if (!objv) {
16071596
PyErr_Fetch(e->exc_type, e->exc_value, e->exc_tb);
16081597
*(e->res) = NULL;
16091598
}
1610-
LEAVE_PYTHON_OVERLAP
1599+
LEAVE_PYTHON
16111600
if (!objv)
16121601
goto done;
16131602
i = Tcl_EvalObjv(e->self->interp, objc, objv, e->flags);
1614-
ENTER_PYTHON_OVERLAP
1603+
ENTER_PYTHON
16151604
if (i == TCL_ERROR) {
16161605
*(e->res) = NULL;
16171606
*(e->exc_type) = NULL;
@@ -1623,7 +1612,7 @@ Tkapp_CallProc(Tkapp_CallEvent *e, int flags)
16231612
else {
16241613
*(e->res) = Tkapp_CallResult(e->self);
16251614
}
1626-
LEAVE_PYTHON_OVERLAP
1615+
LEAVE_PYTHON
16271616

16281617
Tkapp_CallDeallocArgs(objv, objStore, objc);
16291618
done:
@@ -2525,8 +2514,8 @@ PythonCmd(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
25252514
ENTER_PYTHON
25262515

25272516
/* TBD: no error checking here since we know, via the
2528-
* Tkapp_CreateCommand() that the client data is a two-tuple
2529-
*/
2517+
* Tkapp_CreateCommand() that the client data is a two-tuple
2518+
*/
25302519
func = data->func;
25312520

25322521
/* Create argument list (argv1, ..., argvN) */
@@ -2546,14 +2535,11 @@ PythonCmd(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
25462535
if (res == NULL)
25472536
return PythonCmd_Error();
25482537

2549-
ENTER_TCL
2550-
ENTER_OVERLAP
25512538
obj_res = AsObj(res);
25522539
if (obj_res) {
25532540
Tcl_SetObjResult(interp, obj_res);
25542541
rv = TCL_OK;
25552542
}
2556-
LEAVE_OVERLAP_TCL
25572543
if (obj_res == NULL) {
25582544
Py_DECREF(res);
25592545
return PythonCmd_Error();

0 commit comments

Comments
 (0)