mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
rb_ec_stack_check()
* gc.c (rb_ec_stack_check): renamed from rb_threadptr_stack_check() and it accepts `ec`. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60542 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cb81d0ecb1
commit
248d3d54a3
3 changed files with 7 additions and 8 deletions
|
@ -286,7 +286,7 @@ int rb_threadptr_reset_raised(rb_thread_t *th);
|
||||||
#define rb_thread_raised_reset(th, f) ((th)->ec->raised_flag &= ~(f))
|
#define rb_thread_raised_reset(th, f) ((th)->ec->raised_flag &= ~(f))
|
||||||
#define rb_thread_raised_p(th, f) (((th)->ec->raised_flag & (f)) != 0)
|
#define rb_thread_raised_p(th, f) (((th)->ec->raised_flag & (f)) != 0)
|
||||||
#define rb_thread_raised_clear(th) ((th)->ec->raised_flag = 0)
|
#define rb_thread_raised_clear(th) ((th)->ec->raised_flag = 0)
|
||||||
int rb_threadptr_stack_check(rb_thread_t *th);
|
int rb_ec_stack_check(rb_execution_context_t *ec);
|
||||||
|
|
||||||
VALUE rb_f_eval(int argc, const VALUE *argv, VALUE self);
|
VALUE rb_f_eval(int argc, const VALUE *argv, VALUE self);
|
||||||
VALUE rb_make_exception(int argc, const VALUE *argv);
|
VALUE rb_make_exception(int argc, const VALUE *argv);
|
||||||
|
|
11
gc.c
11
gc.c
|
@ -4028,9 +4028,8 @@ ruby_stack_length(VALUE **p)
|
||||||
#endif
|
#endif
|
||||||
#if PREVENT_STACK_OVERFLOW
|
#if PREVENT_STACK_OVERFLOW
|
||||||
static int
|
static int
|
||||||
stack_check(rb_thread_t *th, int water_mark)
|
stack_check(rb_execution_context_t *ec, int water_mark)
|
||||||
{
|
{
|
||||||
rb_execution_context_t *ec = th->ec;
|
|
||||||
int ret;
|
int ret;
|
||||||
SET_STACK_END;
|
SET_STACK_END;
|
||||||
ret = STACK_LENGTH > STACK_LEVEL_MAX - water_mark;
|
ret = STACK_LENGTH > STACK_LEVEL_MAX - water_mark;
|
||||||
|
@ -4043,21 +4042,21 @@ stack_check(rb_thread_t *th, int water_mark)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#define stack_check(th, water_mark) FALSE
|
#define stack_check(ec, water_mark) FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define STACKFRAME_FOR_CALL_CFUNC 838
|
#define STACKFRAME_FOR_CALL_CFUNC 838
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_threadptr_stack_check(rb_thread_t *th)
|
rb_ec_stack_check(rb_execution_context_t *ec)
|
||||||
{
|
{
|
||||||
return stack_check(th, STACKFRAME_FOR_CALL_CFUNC);
|
return stack_check(ec, STACKFRAME_FOR_CALL_CFUNC);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
ruby_stack_check(void)
|
ruby_stack_check(void)
|
||||||
{
|
{
|
||||||
return stack_check(GET_THREAD(), STACKFRAME_FOR_CALL_CFUNC);
|
return stack_check(GET_EC(), STACKFRAME_FOR_CALL_CFUNC);
|
||||||
}
|
}
|
||||||
|
|
||||||
ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS
|
ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS
|
||||||
|
|
|
@ -257,7 +257,7 @@ stack_check(rb_execution_context_t *ec)
|
||||||
rb_thread_t *th = rb_ec_thread_ptr(ec);
|
rb_thread_t *th = rb_ec_thread_ptr(ec);
|
||||||
|
|
||||||
if (!rb_thread_raised_p(th, RAISED_STACKOVERFLOW) &&
|
if (!rb_thread_raised_p(th, RAISED_STACKOVERFLOW) &&
|
||||||
rb_threadptr_stack_check(th)) {
|
rb_ec_stack_check(ec)) {
|
||||||
rb_thread_raised_set(th, RAISED_STACKOVERFLOW);
|
rb_thread_raised_set(th, RAISED_STACKOVERFLOW);
|
||||||
rb_ec_stack_overflow(th->ec, FALSE);
|
rb_ec_stack_overflow(th->ec, FALSE);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue