Skip to content

Commit 0caf355

Browse files
committed
Make all Tcl lock operations into macros for easier tracking
1 parent 6ccdccb commit 0caf355

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

Modules/_tkinter.c

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -230,13 +230,25 @@ static PyThreadState *tcl_tstate = NULL;
230230
#endif
231231

232232
#define ENTER_TCL \
233-
{ PyThreadState *tstate = PyThreadState_Get(); Py_BEGIN_ALLOW_THREADS \
234-
if(tcl_lock)PyThread_acquire_lock(tcl_lock, 1); tcl_tstate = tstate;
233+
{ PyThreadState *tstate = PyThreadState_Get();\
234+
ENTER_TCL_CUSTOM_TSTATE(tstate)
235+
236+
#define ENTER_TCL_CUSTOM_TSTATE(tstate) \
237+
Py_BEGIN_ALLOW_THREADS\
238+
if (tcl_lock)PyThread_acquire_lock(tcl_lock, 1); tcl_tstate = tstate;
235239

236240
#define LEAVE_TCL \
237241
tcl_tstate = NULL; \
238242
if(tcl_lock)PyThread_release_lock(tcl_lock); Py_END_ALLOW_THREADS}
239243

244+
#define LEAVE_TCL_WITH_BUSYWAIT(result) \
245+
tcl_tstate = NULL; \
246+
if (tcl_lock)PyThread_release_lock(tcl_lock);\
247+
if (result == 0)\
248+
Sleep(Tkinter_busywaitinterval);\
249+
Py_END_ALLOW_THREADS
250+
251+
240252
#define ENTER_OVERLAP \
241253
Py_END_ALLOW_THREADS
242254

@@ -2879,15 +2891,9 @@ _tkinter_tkapp_mainloop_impl(TkappObject *self, int threshold)
28792891
LEAVE_TCL
28802892
}
28812893
else {
2882-
Py_BEGIN_ALLOW_THREADS
2883-
if(tcl_lock)PyThread_acquire_lock(tcl_lock, 1);
2884-
tcl_tstate = tstate;
2894+
ENTER_TCL_CUSTOM_TSTATE(tstate)
28852895
result = Tcl_DoOneEvent(TCL_DONT_WAIT);
2886-
tcl_tstate = NULL;
2887-
if(tcl_lock)PyThread_release_lock(tcl_lock);
2888-
if (result == 0)
2889-
Sleep(Tkinter_busywaitinterval);
2890-
Py_END_ALLOW_THREADS
2896+
LEAVE_TCL_WITH_BUSYWAIT(result)
28912897
}
28922898

28932899
if (PyErr_CheckSignals() != 0) {
@@ -3345,17 +3351,11 @@ EventHook(void)
33453351
break;
33463352
}
33473353
#endif
3348-
Py_BEGIN_ALLOW_THREADS
3349-
if(tcl_lock)PyThread_acquire_lock(tcl_lock, 1);
3350-
tcl_tstate = event_tstate;
3354+
ENTER_TCL_CUSTOM_TSTATE(event_tstate)
33513355

33523356
result = Tcl_DoOneEvent(TCL_DONT_WAIT);
33533357

3354-
tcl_tstate = NULL;
3355-
if(tcl_lock)PyThread_release_lock(tcl_lock);
3356-
if (result == 0)
3357-
Sleep(Tkinter_busywaitinterval);
3358-
Py_END_ALLOW_THREADS
3358+
LEAVE_TCL_WITH_BUSYWAIT(result)
33593359

33603360
if (result < 0)
33613361
break;

0 commit comments

Comments
 (0)