exception.h: Only push the exception frame after sigsetjmp.

Otherwise on Windows longjmp may want to mess with the exception frame.
This commit is contained in:
Alexandre Julliard 2008-05-01 11:07:08 +02:00
parent 0ee44f5e20
commit c20e8c9005

View File

@ -96,7 +96,6 @@
} else { \ } else { \
__f.frame.Handler = __wine_exception_handler; \ __f.frame.Handler = __wine_exception_handler; \
__f.u.filter = (func); \ __f.u.filter = (func); \
__wine_push_frame( &__f.frame ); \
if (sigsetjmp( __f.jmp, 0 )) { \ if (sigsetjmp( __f.jmp, 0 )) { \
const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \ const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \
do { do {
@ -108,7 +107,6 @@
break; \ break; \
} else { \ } else { \
__f.frame.Handler = __wine_exception_handler_page_fault; \ __f.frame.Handler = __wine_exception_handler_page_fault; \
__wine_push_frame( &__f.frame ); \
if (sigsetjmp( __f.jmp, 0 )) { \ if (sigsetjmp( __f.jmp, 0 )) { \
const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \ const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \
do { do {
@ -120,7 +118,6 @@
break; \ break; \
} else { \ } else { \
__f.frame.Handler = __wine_exception_handler_all; \ __f.frame.Handler = __wine_exception_handler_all; \
__wine_push_frame( &__f.frame ); \
if (sigsetjmp( __f.jmp, 0 )) { \ if (sigsetjmp( __f.jmp, 0 )) { \
const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \ const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \
do { do {
@ -129,6 +126,7 @@
} while (0); \ } while (0); \
break; \ break; \
} \ } \
__wine_push_frame( &__f.frame ); \
__first = 0; \ __first = 0; \
} \ } \
} while (0); } while (0);