Christian Tismer <tismer@tismer.com>: > in new Stackless, I saved > tstate->exc_type/value/traceback and > tstate->curexc_type/value/traceback > Why is there this double set of variables, I've just been wrestling with this stuff recently for Pyrex, and as far as I can tell, this is how it works: When an exception is set, it is put into curexc_{type,value,traceback} and unwinding of the stack begins, searching for a handler. When a handler is found, the exception is transferred to exc_{type,value,traceback} and execution of the handler begins. In other words, curexc_* holds an exception which has been set but not yet caught, and exc_* holds an exception which has been caught and is now being handled. > which one should be preserved if at all > between tasklet switches? I think you'll have to save exc_*, since a task switch could occur during execution of an except-block. You may get away without saving curexc_*, if it's impossible for a task switch to occur while in the middle of unwinding the stack looking for a matching except-clause. > Under PythonWin, I saw crashes due to dangling > references through that, which vanished when > I increfed the exc_/... things. Problably they > were multiply reset. I wouldn't fix that by putting in random increfs. You'd better find out exactly what's going on and make it do the right thing! Greg Ewing, Computer Science Dept, +--------------------------------------+ University of Canterbury, | A citizen of NewZealandCorp, a | Christchurch, New Zealand | wholly-owned subsidiary of USA Inc. | greg@cosc.canterbury.ac.nz +--------------------------------------+
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4