void rb_memerror() { rb_thread_t th = rb_curr_thread; if (!nomem_error || (rb_thread_raised_p(th, RAISED_NOMEMORY) && rb_safe_level() < 4)) { fprintf(stderr, "[FATAL] failed to allocate memory\n"); exit(1); } if (rb_thread_raised_p(th, RAISED_NOMEMORY)) { rb_exc_jump(nomem_error); } rb_thread_raised_set(th, RAISED_NOMEMORY); rb_exc_raise(nomem_error); }
static inline void stack_check(void) { rb_thread_t *th = GET_THREAD(); if (!rb_thread_raised_p(th, RAISED_STACKOVERFLOW) && ruby_stack_check()) { rb_thread_raised_set(th, RAISED_STACKOVERFLOW); rb_exc_raise(sysstack_error); } }
void ruby_alloca_chkstk(size_t len, void *sp) { if (ruby_stack_length(NULL) * sizeof(VALUE) >= len) { rb_thread_t *th = GET_THREAD(); if (!rb_thread_raised_p(th, RAISED_STACKOVERFLOW)) { rb_thread_raised_set(th, RAISED_STACKOVERFLOW); rb_exc_raise(sysstack_error); } } }