Skip to content

Commit ccf51ec

Browse files
committed
Don't release Tcl lock in Tcl custom commands
1 parent 028b32a commit ccf51ec

File tree

1 file changed

+7
-19
lines changed

1 file changed

+7
-19
lines changed

Modules/_tkinter.c

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -284,18 +284,9 @@ if (tcl_lock){\
284284
tcl_tstate = NULL; RELEASE_TCL_LOCK; }
285285

286286
#define ENTER_PYTHON \
287-
{ PyThreadState *tstate = tcl_tstate; tcl_tstate = NULL; \
288-
RELEASE_TCL_LOCK; PyEval_RestoreThread((tstate)); }
289-
290-
#define LEAVE_PYTHON \
291-
{ PyThreadState *tstate = PyEval_SaveThread(); \
292-
ACQUIRE_TCL_LOCK;\
293-
tcl_tstate = tstate; }
294-
295-
#define ENTER_PYTHON_OVERLAP \
296287
{ PyThreadState *tstate = tcl_tstate; tcl_tstate = NULL; PyEval_RestoreThread((tstate)); }
297288

298-
#define LEAVE_PYTHON_OVERLAP \
289+
#define LEAVE_PYTHON \
299290
{ PyThreadState *tstate = PyEval_SaveThread(); tcl_tstate = tstate; }
300291

301292

@@ -1449,17 +1440,17 @@ Tkapp_CallProc(Tkapp_CallEvent *e, int flags)
14491440
Tcl_Obj **objv;
14501441
int objc;
14511442
int i;
1452-
ENTER_PYTHON_OVERLAP
1443+
ENTER_PYTHON
14531444
objv = Tkapp_CallArgs(e->args, objStore, &objc);
14541445
if (!objv) {
14551446
PyErr_Fetch(e->exc_type, e->exc_value, e->exc_tb);
14561447
*(e->res) = NULL;
14571448
}
1458-
LEAVE_PYTHON_OVERLAP
1449+
LEAVE_PYTHON
14591450
if (!objv)
14601451
goto done;
14611452
i = Tcl_EvalObjv(e->self->interp, objc, objv, e->flags);
1462-
ENTER_PYTHON_OVERLAP
1453+
ENTER_PYTHON
14631454
if (i == TCL_ERROR) {
14641455
*(e->res) = NULL;
14651456
*(e->exc_type) = NULL;
@@ -1471,7 +1462,7 @@ Tkapp_CallProc(Tkapp_CallEvent *e, int flags)
14711462
else {
14721463
*(e->res) = Tkapp_CallResult(e->self);
14731464
}
1474-
LEAVE_PYTHON_OVERLAP
1465+
LEAVE_PYTHON
14751466

14761467
Tkapp_CallDeallocArgs(objv, objStore, objc);
14771468
done:
@@ -2405,8 +2396,8 @@ PythonCmd(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[
24052396
ENTER_PYTHON
24062397

24072398
/* TBD: no error checking here since we know, via the
2408-
* Tkapp_CreateCommand() that the client data is a two-tuple
2409-
*/
2399+
* Tkapp_CreateCommand() that the client data is a two-tuple
2400+
*/
24102401
func = data->func;
24112402

24122403
/* Create argument list (argv1, ..., argvN) */
@@ -2427,14 +2418,11 @@ PythonCmd(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[
24272418
if (res == NULL)
24282419
return PythonCmd_Error();
24292420

2430-
ENTER_TCL
2431-
ENTER_OVERLAP
24322421
obj_res = AsObj(res);
24332422
if (obj_res) {
24342423
Tcl_SetObjResult(interp, obj_res);
24352424
rv = TCL_OK;
24362425
}
2437-
LEAVE_OVERLAP_TCL
24382426
if (obj_res == NULL) {
24392427
Py_DECREF(res);
24402428
return PythonCmd_Error();

0 commit comments

Comments
 (0)