]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-103532: Remove TKINTER_PROTECT_LOADTK code (GH-103535)
authorChristopher Chavez <chrischavez@gmx.us>
Fri, 14 Apr 2023 14:04:16 +0000 (09:04 -0500)
committerGitHub <noreply@github.com>
Fri, 14 Apr 2023 14:04:16 +0000 (09:04 -0500)
This was only needed for Tk 8.4.13 and older,
but Tkinter already requires at least 8.5.12.

Modules/_tkinter.c
Modules/tkappinit.c
Modules/tkinter.h

index 20e01c79668549ae17b6aa81dd01360e5c2c310b..385a05932a77ed42ac74d199332c48390efcd508 100644 (file)
@@ -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 *);
 
@@ -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;
     }
@@ -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) {
@@ -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;
     }
@@ -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
@@ -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;
         }
     }
index 7616d9d319d228a3b9d7824576b78774834cb133..67d6250318c61645bbb700b6c58f4f1415b9d565 100644 (file)
 
 #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
@@ -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;
     }
 
index cb5a806b0c43262a01a717b6bb9faddb83efb5d6..40281c2176033183f62a19841b066d19ef45ea04 100644 (file)
                         (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 */