diff options
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -1047,8 +1047,8 @@ ruby_stack_length(VALUE **p) return STACK_LENGTH; } -int -ruby_stack_check(void) +static int +stack_check(void) { int ret; rb_thread_t *th = GET_THREAD(); @@ -1063,6 +1063,16 @@ ruby_stack_check(void) return ret; } +int +ruby_stack_check(void) +{ +#if defined(POSIX_SIGNAL) && defined(SIGSEGV) && defined(HAVE_SIGALTSTACK) + return 0; +#else + return stack_check(); +#endif +} + static void init_mark_stack(rb_objspace_t *objspace) { @@ -1269,7 +1279,7 @@ gc_mark(rb_objspace_t *objspace, VALUE ptr, int lev) if (obj->as.basic.flags & FL_MARK) return; /* already marked */ obj->as.basic.flags |= FL_MARK; - if (lev > GC_LEVEL_MAX || (lev == 0 && ruby_stack_check())) { + if (lev > GC_LEVEL_MAX || (lev == 0 && stack_check())) { if (!mark_stack_overflow) { if (mark_stack_ptr - mark_stack < MARK_STACK_MAX) { *mark_stack_ptr = ptr; |