diff Python/ceval.c @ 48887:c562c8dae49a

Issue 3611: in some cases (a __del__ re-raising an exception, when called from inside an 'except' clause), the exception __context__ would be reset to None. This crases the interpreter if this precisely happens inside PyErr_SetObject. - now the __context__ is properly preserved - in any case, PyErr_SetObject now saves the current exc_value in a local variable, to avoid such crashes in the future. Reviewer: Antoine Pitrou.
author Amaury Forgeot d'Arc <amauryfa@gmail.com>
date Fri, 29 Aug 2008 07:13:32 +0000
parents 013d4d8407cb
children 22ab106e3186
line wrap: on
line diff
--- a/Python/ceval.c	Thu Aug 28 14:55:10 2008 +0000
+++ b/Python/ceval.c	Fri Aug 29 07:13:32 2008 +0000
@@ -2453,11 +2453,6 @@
 
 			if (b->b_type == EXCEPT_HANDLER) {
 				UNWIND_EXCEPT_HANDLER(b);
-				if (why == WHY_EXCEPTION && !throwflag) {
-					Py_CLEAR(tstate->exc_type);
-					Py_CLEAR(tstate->exc_value);
-					Py_CLEAR(tstate->exc_traceback);
-				}
 				continue;
 			}
 			UNWIND_BLOCK(b);