Skip to content

Commit

Permalink
pythongh-103532: Remove TKINTER_PROTECT_LOADTK code
Browse files Browse the repository at this point in the history
This was only needed for Tk 8.4.13 and older,
but Tkinter already requires at least 8.5.12.
  • Loading branch information
chrstphrchvz committed Apr 14, 2023
1 parent a3d313a commit 5becf1a
Show file tree
Hide file tree
Showing 3 changed files with 0 additions and 79 deletions.
47 changes: 0 additions & 47 deletions Modules/_tkinter.c
Original file line number Diff line number Diff line change
Expand Up @@ -324,10 +324,6 @@ static int quitMainLoop = 0;
static int errorInCmd = 0;
static PyObject *excInCmd;

#ifdef TKINTER_PROTECT_LOADTK
static int tk_load_failed = 0;
#endif


static PyObject *Tkapp_UnicodeResult(TkappObject *);

Expand Down Expand Up @@ -532,17 +528,7 @@ Tcl_AppInit(Tcl_Interp *interp)
return TCL_OK;
}

#ifdef TKINTER_PROTECT_LOADTK
if (tk_load_failed) {
PySys_WriteStderr("Tk_Init error: %s\n", TKINTER_LOADTK_ERRMSG);
return TCL_ERROR;
}
#endif

if (Tk_Init(interp) == TCL_ERROR) {
#ifdef TKINTER_PROTECT_LOADTK
tk_load_failed = 1;
#endif
PySys_WriteStderr("Tk_Init error: %s\n", Tcl_GetStringResult(interp));
return TCL_ERROR;
}
Expand Down Expand Up @@ -635,12 +621,6 @@ Tkapp_New(const char *screenName, const char *className,
Tcl_SetVar(v->interp,
"_tkinter_skip_tk_init", "1", TCL_GLOBAL_ONLY);
}
#ifdef TKINTER_PROTECT_LOADTK
else if (tk_load_failed) {
Tcl_SetVar(v->interp,
"_tkinter_tk_failed", "1", TCL_GLOBAL_ONLY);
}
#endif

/* some initial arguments need to be in argv */
if (sync || use) {
Expand Down Expand Up @@ -702,18 +682,6 @@ Tkapp_New(const char *screenName, const char *className,

if (Tcl_AppInit(v->interp) != TCL_OK) {
PyObject *result = Tkinter_Error(v);
#ifdef TKINTER_PROTECT_LOADTK
if (wantTk) {
const char *_tkinter_tk_failed;
_tkinter_tk_failed = Tcl_GetVar(v->interp,
"_tkinter_tk_failed", TCL_GLOBAL_ONLY);

if ( _tkinter_tk_failed != NULL &&
strcmp(_tkinter_tk_failed, "1") == 0) {
tk_load_failed = 1;
}
}
#endif
Py_DECREF((PyObject *)v);
return (TkappObject *)result;
}
Expand Down Expand Up @@ -2780,18 +2748,6 @@ _tkinter_tkapp_loadtk_impl(TkappObject *self)
const char * _tk_exists = NULL;
int err;

#ifdef TKINTER_PROTECT_LOADTK
/* Up to Tk 8.4.13, Tk_Init deadlocks on the second call when the
* first call failed.
* To avoid the deadlock, we just refuse the second call through
* a static variable.
*/
if (tk_load_failed) {
PyErr_SetString(Tkinter_TclError, TKINTER_LOADTK_ERRMSG);
return NULL;
}
#endif

/* We want to guard against calling Tk_Init() multiple times */
CHECK_TCL_APPARTMENT;
ENTER_TCL
Expand All @@ -2811,9 +2767,6 @@ _tkinter_tkapp_loadtk_impl(TkappObject *self)
if (_tk_exists == NULL || strcmp(_tk_exists, "1") != 0) {
if (Tk_Init(interp) == TCL_ERROR) {
Tkinter_Error(self);
#ifdef TKINTER_PROTECT_LOADTK
tk_load_failed = 1;
#endif
return NULL;
}
}
Expand Down
24 changes: 0 additions & 24 deletions Modules/tkappinit.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,10 @@

#include "tkinter.h"

#ifdef TKINTER_PROTECT_LOADTK
/* See Tkapp_TkInit in _tkinter.c for the usage of tk_load_faile */
static int tk_load_failed;
#endif

int
Tcl_AppInit(Tcl_Interp *interp)
{
const char *_tkinter_skip_tk_init;
#ifdef TKINTER_PROTECT_LOADTK
const char *_tkinter_tk_failed;
#endif

#ifdef TK_AQUA
#ifndef MAX_PATH_LEN
Expand Down Expand Up @@ -90,23 +82,7 @@ Tcl_AppInit(Tcl_Interp *interp)
return TCL_OK;
}

#ifdef TKINTER_PROTECT_LOADTK
_tkinter_tk_failed = Tcl_GetVar(interp,
"_tkinter_tk_failed", TCL_GLOBAL_ONLY);

if (tk_load_failed || (
_tkinter_tk_failed != NULL &&
strcmp(_tkinter_tk_failed, "1") == 0)) {
Tcl_SetResult(interp, TKINTER_LOADTK_ERRMSG, TCL_STATIC);
return TCL_ERROR;
}
#endif

if (Tk_Init(interp) == TCL_ERROR) {
#ifdef TKINTER_PROTECT_LOADTK
tk_load_failed = 1;
Tcl_SetVar(interp, "_tkinter_tk_failed", "1", TCL_GLOBAL_ONLY);
#endif
return TCL_ERROR;
}

Expand Down
8 changes: 0 additions & 8 deletions Modules/tkinter.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,4 @@
(TK_RELEASE_LEVEL << 8) | \
(TK_RELEASE_SERIAL << 0))

/* Protect Tk 8.4.13 and older from a deadlock that happens when trying
* to load tk after a failed attempt. */
#if TK_HEX_VERSION < 0x0804020e
#define TKINTER_PROTECT_LOADTK
#define TKINTER_LOADTK_ERRMSG \
"Calling Tk_Init again after a previous call failed might deadlock"
#endif

#endif /* !TKINTER_H */

0 comments on commit 5becf1a

Please sign in to comment.