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.
This commit is contained in:
Barry Warsaw 1999-09-08 16:26:33 +00:00
parent 71eb8644d7
commit f6202635f9
1 changed files with 8 additions and 0 deletions

View File

@ -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 {