Thanks, Jonas for the quick response (again)!
On Sep 26, 2009, at 15:31 , Jonas Maebe wrote:
On 25 Sep 2009, at 18:09, Lukas Zeller wrote:
The longjmp itself works, but after this has happened once, further
exceptions crash the program. I wonder if there is some (FPC)
cleanup routine I could or should call before the longjmp that
would make the scenario work, or if there is technical evidence
that it can't work at all.
There is no "technical evidence" that it can't work at all, but you
would have to call internal RTL routines [...]
I hope I read that correctly as: "just longjump can't work and leaves
a mess behind that might explain crashes on subsequent exceptions"
[...] which are not for public use, so
a) this is not documented or supported in any way (I can't tell you
the names by heart either)
b) if you manage to figure it out, then your code can break with any
future FPC version
Yes - if it was "my code", I'd try to avoid the situation. It
unfortunately isn't, the calling environment only provides that
routine which longjmps to handle a exception situation. So making it
work with the current FPC version and risking it'll break in a future
version would be better than nothing.
Maybe there's a better solution, but what are the official options I
have in ExceptProc other than halt? If I just return from it, how does
the call flow continue? At that time the stack must be already
unwound, but how far? While I understand ExceptProc is called when a
exception falls through all the way down to a pascal main program, I
can't really imagine at what point the same happens in a pascal shared
lib.
Thanks for any explanations!
Lukas
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel