Skip to content

Commit 77daecc

Browse files
committed
Make all Tcl lock operations into macros for easier tracking
1 parent d70c659 commit 77daecc

File tree

1 file changed

+20
-18
lines changed

1 file changed

+20
-18
lines changed

Modules/_tkinter.c

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -210,12 +210,24 @@ static PyThreadState *tcl_tstate = NULL;
210210
#endif
211211

212212
#define ENTER_TCL \
213-
{ PyThreadState *tstate = PyThreadState_Get(); Py_BEGIN_ALLOW_THREADS \
214-
if(tcl_lock)PyThread_acquire_lock(tcl_lock, 1); tcl_tstate = tstate;
213+
{ PyThreadState *tstate = PyThreadState_Get();\
214+
ENTER_TCL_CUSTOM_TSTATE(tstate)
215+
216+
#define ENTER_TCL_CUSTOM_TSTATE(tstate) \
217+
Py_BEGIN_ALLOW_THREADS\
218+
if (tcl_lock)PyThread_acquire_lock(tcl_lock, 1); tcl_tstate = tstate;
215219

216220
#define LEAVE_TCL \
217221
tcl_tstate = NULL; if(tcl_lock)PyThread_release_lock(tcl_lock); Py_END_ALLOW_THREADS}
218222

223+
#define LEAVE_TCL_WITH_BUSYWAIT(result) \
224+
tcl_tstate = NULL; \
225+
if (tcl_lock)PyThread_release_lock(tcl_lock);\
226+
if (result == 0)\
227+
Sleep(Tkinter_busywaitinterval);\
228+
Py_END_ALLOW_THREADS
229+
230+
219231
#define ENTER_OVERLAP \
220232
Py_END_ALLOW_THREADS
221233

@@ -250,7 +262,9 @@ static PyThreadState *tcl_tstate = NULL;
250262
#else
251263

252264
#define ENTER_TCL
265+
#define ENTER_TCL_CUSTOM_TSTATE(tstate)
253266
#define LEAVE_TCL
267+
#define LEAVE_TCL_WITH_BUSYWAIT(result)
254268
#define ENTER_OVERLAP
255269
#define LEAVE_OVERLAP
256270
#define LEAVE_OVERLAP_TCL
@@ -3081,15 +3095,9 @@ Tkapp_MainLoop(PyObject *selfptr, PyObject *args)
30813095
LEAVE_TCL
30823096
}
30833097
else {
3084-
Py_BEGIN_ALLOW_THREADS
3085-
if(tcl_lock)PyThread_acquire_lock(tcl_lock, 1);
3086-
tcl_tstate = tstate;
3098+
ENTER_TCL_CUSTOM_TSTATE(tstate)
30873099
result = Tcl_DoOneEvent(TCL_DONT_WAIT);
3088-
tcl_tstate = NULL;
3089-
if(tcl_lock)PyThread_release_lock(tcl_lock);
3090-
if (result == 0)
3091-
Sleep(Tkinter_busywaitinterval);
3092-
Py_END_ALLOW_THREADS
3100+
LEAVE_TCL_WITH_BUSYWAIT(result)
30933101
}
30943102
#else
30953103
result = Tcl_DoOneEvent(0);
@@ -3595,17 +3603,11 @@ EventHook(void)
35953603
}
35963604
#endif
35973605
#if defined(WITH_THREAD) || defined(MS_WINDOWS)
3598-
Py_BEGIN_ALLOW_THREADS
3599-
if(tcl_lock)PyThread_acquire_lock(tcl_lock, 1);
3600-
tcl_tstate = event_tstate;
3606+
ENTER_TCL_CUSTOM_TSTATE(event_tstate)
36013607

36023608
result = Tcl_DoOneEvent(TCL_DONT_WAIT);
36033609

3604-
tcl_tstate = NULL;
3605-
if(tcl_lock)PyThread_release_lock(tcl_lock);
3606-
if (result == 0)
3607-
Sleep(Tkinter_busywaitinterval);
3608-
Py_END_ALLOW_THREADS
3610+
LEAVE_TCL_WITH_BUSYWAIT(result)
36093611
#else
36103612
result = Tcl_DoOneEvent(0);
36113613
#endif

0 commit comments

Comments
 (0)