Bug #9739 ยป 0001-Handle-machine-stack-overflow-on-mingw.patch
| eval_intern.h | ||
|---|---|---|
|
EXCEPTION_CONTINUE_SEARCH) { \
|
||
|
/* never reaches here */ \
|
||
|
}
|
||
|
#elif defined(__MINGW32__)
|
||
|
LONG WINAPI rb_w32_stack_overflow_handler(struct _EXCEPTION_POINTERS *);
|
||
|
#define SAVE_ROOT_JMPBUF_BEFORE_STMT \
|
||
|
do { \
|
||
|
PVOID _handler = AddVectoredExceptionHandler(1, rb_w32_stack_overflow_handler);
|
||
|
#define SAVE_ROOT_JMPBUF_AFTER_STMT \
|
||
|
RemoveVectoredExceptionHandler(_handler); \
|
||
|
} while (0);
|
||
|
#else
|
||
|
#define SAVE_ROOT_JMPBUF_BEFORE_STMT
|
||
|
#define SAVE_ROOT_JMPBUF_AFTER_STMT
|
||
| thread_win32.c | ||
|---|---|---|
|
return rb_thread_raised_p(th, RAISED_STACKOVERFLOW);
|
||
|
}
|
||
|
#if defined(__MINGW32__)
|
||
|
LONG WINAPI
|
||
|
rb_w32_stack_overflow_handler(struct _EXCEPTION_POINTERS *exception)
|
||
|
{
|
||
|
if (exception->ExceptionRecord->ExceptionCode == EXCEPTION_STACK_OVERFLOW) {
|
||
|
rb_thread_raised_set(GET_THREAD(), RAISED_STACKOVERFLOW);
|
||
|
raise(SIGSEGV);
|
||
|
}
|
||
|
return EXCEPTION_CONTINUE_SEARCH;
|
||
|
}
|
||
|
#endif
|
||
|
#ifdef RUBY_ALLOCA_CHKSTK
|
||
|
void
|
||
|
ruby_alloca_chkstk(size_t len, void *sp)
|
||