Skip to content

Commit

Permalink
Fix compiler warning for misleading guarding in the tkinter (GH-26244)
Browse files Browse the repository at this point in the history
The newest gcc emmits this warning:

```
/Modules/_tkinter.c:272:9: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
  272 |         if(tcl_lock)PyThread_acquire_lock(tcl_lock, 1); tcl_tstate = tstate; }
      |         ^~
/Modules/_tkinter.c:2869:5: note: in expansion of macro ‘LEAVE_PYTHON’
 2869 |     LEAVE_PYTHON
      |     ^~~~~~~~~~~~
/Modules/_tkinter.c:243:5: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
  243 |     (*(PyThreadState**)Tcl_GetThreadData(&state_key, sizeof(PyThreadState*)))
      |     ^
/Modules/_tkinter.c:272:57: note: in expansion of macro ‘tcl_tstate’
  272 |         if(tcl_lock)PyThread_acquire_lock(tcl_lock, 1); tcl_tstate = tstate; }
      |                                                         ^~~~~~~~~~
/Modules/_tkinter.c:2869:5: note: in expansion of macro ‘LEAVE_PYTHON’
 2869 |     LEAVE_PYTHON

```

that's because the macro packs together two statements at the same level
as the "if". The warning is misleading but is very noisy so it makes
sense to fix it.
  • Loading branch information
pablogsal committed May 19, 2021
1 parent be93f81 commit 95d0471
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions Modules/_tkinter.c
Expand Up @@ -246,12 +246,15 @@ static PyThreadState *tcl_tstate = NULL;
#endif

#define ENTER_TCL \
{ PyThreadState *tstate = PyThreadState_Get(); Py_BEGIN_ALLOW_THREADS \
if(tcl_lock)PyThread_acquire_lock(tcl_lock, 1); tcl_tstate = tstate;
{ PyThreadState *tstate = PyThreadState_Get(); \
Py_BEGIN_ALLOW_THREADS \
if(tcl_lock)PyThread_acquire_lock(tcl_lock, 1); \
tcl_tstate = tstate;

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

#define ENTER_OVERLAP \
Py_END_ALLOW_THREADS
Expand All @@ -261,12 +264,14 @@ static PyThreadState *tcl_tstate = NULL;

#define ENTER_PYTHON \
{ PyThreadState *tstate = tcl_tstate; tcl_tstate = NULL; \
if(tcl_lock) \
PyThread_release_lock(tcl_lock); PyEval_RestoreThread((tstate)); }
if(tcl_lock) \
PyThread_release_lock(tcl_lock); \
PyEval_RestoreThread((tstate)); }

#define LEAVE_PYTHON \
{ PyThreadState *tstate = PyEval_SaveThread(); \
if(tcl_lock)PyThread_acquire_lock(tcl_lock, 1); tcl_tstate = tstate; }
if(tcl_lock)PyThread_acquire_lock(tcl_lock, 1); \
tcl_tstate = tstate; }

#define CHECK_TCL_APPARTMENT \
if (((TkappObject *)self)->threaded && \
Expand Down

0 comments on commit 95d0471

Please sign in to comment.