mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
cb74d9e24e
Finally handlers are - unlike except blocks - not part of the function they are in, but separate functions, which are called during unwind. PSEH implements them on GCC using nested functions. While "return" from a finally handler is allowed with native SEH, it's handled by the compiler through an extra unwinding operation using _local_unwind, WHICH IS NOT SUPPORTED BY PSEH! With PSEH, returning from a finally handler does not return from the function, instead it will only return from the finally handler and the function will continue below the finally handler as if there was no return at all. To fix this, the return is removed and an additional success check is added. Also use _SEH_VOLATILE to make sure the variable assignment is not optimized away by the compiler and add zero out the result parameters on error. |
||
---|---|---|
.. | ||
cacheman.c | ||
copy.c | ||
fs.c | ||
lazywrite.c | ||
mdl.c | ||
pin.c | ||
view.c |