diff Python/ceval.c @ 35343:dd4357a5da7c 2.4

Fix for SF bug # 900092, hotshot.stats.load assertion failure. This patch restores the tracing of a 'return' event for exceptions that cause a function to exit. Also, update the unit test. I will port to Python 2.5.
author Barry Warsaw <barry@python.org>
date Mon, 15 Aug 2005 17:32:56 +0000
parents be370abb020f
children 90bb71122257
line wrap: on
line diff
--- a/Python/ceval.c	Sat Aug 13 09:06:24 2005 +0000
+++ b/Python/ceval.c	Mon Aug 15 17:32:56 2005 +0000
@@ -2462,14 +2462,20 @@
 
 fast_yield:
 	if (tstate->use_tracing) {
-		if (tstate->c_tracefunc
-		    && (why == WHY_RETURN || why == WHY_YIELD)) {
-			if (call_trace(tstate->c_tracefunc,
-				       tstate->c_traceobj, f,
-				       PyTrace_RETURN, retval)) {
-				Py_XDECREF(retval);
-				retval = NULL;
-				why = WHY_EXCEPTION;
+		if (tstate->c_tracefunc) {
+			if (why == WHY_RETURN || why == WHY_YIELD) {
+				if (call_trace(tstate->c_tracefunc,
+					       tstate->c_traceobj, f,
+					       PyTrace_RETURN, retval)) {
+					Py_XDECREF(retval);
+					retval = NULL;
+					why = WHY_EXCEPTION;
+				}
+			}
+			else if (why == WHY_EXCEPTION) {
+				call_trace_protected(tstate->c_tracefunc,
+						     tstate->c_traceobj, f,
+						     PyTrace_RETURN);
 			}
 		}
 		if (tstate->c_profilefunc) {