summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>1999-09-08 16:26:33 (GMT)
committerBarry Warsaw <barry@python.org>1999-09-08 16:26:33 (GMT)
commitf6202635f9fd0fc55308e15600adfe3d1bc1e97f (patch)
treebaa45349810c1982b341a5dd7a4d518237f626ab /Python
parent71eb8644d7e27fd379a2cf78c509155bdb179332 (diff)
downloadcpython-f6202635f9fd0fc55308e15600adfe3d1bc1e97f.zip
cpython-f6202635f9fd0fc55308e15600adfe3d1bc1e97f.tar.gz
cpython-f6202635f9fd0fc55308e15600adfe3d1bc1e97f.tar.bz2
call_trace(): A fix for PR#73, if an exception occurred in the
tracefunc (or profilefunc -- we're not sure which), zap the global trace and profile funcs so that we can't get into recursive loop when instantiating the resulting class based exception.
Diffstat (limited to 'Python')
-rw-r--r--Python/ceval.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index 1c51ccf..4c1bf2f 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2201,6 +2201,14 @@ call_trace(p_trace, p_newtrace, f, msg, arg)
Py_XDECREF(*p_newtrace);
*p_newtrace = NULL;
}
+ /* to be extra double plus sure we don't get recursive
+ * calls inf either tracefunc or profilefunc gets an
+ * exception, zap the global variables.
+ */
+ Py_XDECREF(tstate->sys_tracefunc);
+ tstate->sys_tracefunc = NULL;
+ Py_XDECREF(tstate->sys_profilefunc);
+ tstate->sys_profilefunc = NULL;
return -1;
}
else {