Commit f629ff7c authored by Guido van Rossum's avatar Guido van Rossum

# Note: a previous checkin message was lost because I can now use CVS

# 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).
parent c1a7c638
......@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment