]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
# Note: a previous checkin message was lost because I can now use CVS
authorGuido van Rossum <guido@python.org>
Mon, 15 Jun 1998 14:03:52 +0000 (14:03 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 15 Jun 1998 14:03:52 +0000 (14:03 +0000)
# from my PC at home, but it can't send email :-(

Add a clarifying comment about the new ENTER_OVERLAP and
LEAVE_OVERLAP_TCL macros; get rid of all the bogus tests for deleted
interpreters (Tcl already tests for this; they were left over from an
earlier misguided attempt to fix the threading).

Modules/_tkinter.c

index c6c47dbfb55209be8350d4dd9cddf886562ce488..6d096a04c79f5936d482e868584c831cb9d4e9f2 100644 (file)
@@ -146,6 +146,13 @@ PERFORMANCE OF THIS SOFTWARE.
    interpreter lock; inside the brackets, the Python interpreter lock has been 
    released and the lock for Tcl has been acquired.
 
+   Sometimes, it is necessary to have both the Python lock and the Tcl lock.
+   (For example, when transferring data from the Tcl interpreter result to a
+   Python string object.)  This can be done by using different macros to close
+   the ENTER_TCL block: ENTER_OVERLAP reacquires the Python lock (and restores
+   the thread state) but doesn't release the Tcl lock; LEAVE_OVERLAP_TCL
+   releases the Tcl lock.
+
    By contrast, ENTER_PYTHON(tstate) and LEAVE_PYTHON are used in Tcl event
    handlers when the handler needs to use Python.  Such event handlers are
    entered while the lock for Tcl is held; the event handler presumably needs
@@ -534,12 +541,6 @@ Tkapp_Call(self, args)
        Tcl_CmdInfo info; /* and this is added */
        Tcl_Interp *interp = Tkapp_Interp(self); /* and this too */
 
-       /* and this test */
-       if (Tcl_InterpDeleted(interp)) {
-               PyErr_SetString(Tkinter_TclError, "application is destroyed");
-               return NULL;
-       }
-
        if (!(tmp = PyList_New(0)))
            return NULL;
 
@@ -652,11 +653,6 @@ Tkapp_GlobalCall(self, args)
        char *cmd;
        PyObject *res = NULL;
 
-       if (Tcl_InterpDeleted(Tkapp_Interp(self))) {
-               PyErr_SetString(Tkinter_TclError, "application is destroyed");
-               return NULL;
-       }
-
        cmd  = Merge(args);
        if (!cmd)
                PyErr_SetString(Tkinter_TclError, "merge failed");
@@ -691,11 +687,6 @@ Tkapp_Eval(self, args)
        if (!PyArg_ParseTuple(args, "s", &script))
                return NULL;
 
-       if (Tcl_InterpDeleted(Tkapp_Interp(self))) {
-               PyErr_SetString(Tkinter_TclError, "application is destroyed");
-               return NULL;
-       }
-
        ENTER_TCL
        err = Tcl_Eval(Tkapp_Interp(self), script);
        ENTER_OVERLAP
@@ -716,11 +707,6 @@ Tkapp_GlobalEval(self, args)
        PyObject *res = NULL;
        int err;
 
-       if (Tcl_InterpDeleted(Tkapp_Interp(self))) {
-               PyErr_SetString(Tkinter_TclError, "application is destroyed");
-               return NULL;
-       }
-
        if (!PyArg_ParseTuple(args, "s", &script))
                return NULL;
 
@@ -744,11 +730,6 @@ Tkapp_EvalFile(self, args)
        PyObject *res = NULL;
        int err;
 
-       if (Tcl_InterpDeleted(Tkapp_Interp(self))) {
-               PyErr_SetString(Tkinter_TclError, "application is destroyed");
-               return NULL;
-       }
-
        if (!PyArg_ParseTuple(args, "s", &fileName))
                return NULL;
 
@@ -773,11 +754,6 @@ Tkapp_Record(self, args)
        PyObject *res = NULL;
        int err;
 
-       if (Tcl_InterpDeleted(Tkapp_Interp(self))) {
-               PyErr_SetString(Tkinter_TclError, "application is destroyed");
-               return NULL;
-       }
-
        if (!PyArg_ParseTuple(args, "s", &script))
                return NULL;
 
@@ -823,11 +799,6 @@ SetVar(self, args, flags)
        PyObject *newValue;
        PyObject *tmp;
 
-       if (Tcl_InterpDeleted(Tkapp_Interp(self))) {
-               PyErr_SetString(Tkinter_TclError, "application is destroyed");
-               return NULL;
-       }
-
        tmp = PyList_New(0);
        if (!tmp)
                return NULL;