@@ -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