diff --git a/load.c b/load.c index af2475f999..89e9ea8f99 100644 --- a/load.c +++ b/load.c @@ -1284,7 +1284,7 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa else { switch (found) { case 'r': - load_iseq_eval(ec, path); + load_iseq_eval(saved.ec, path); break; case 's': diff --git a/thread.c b/thread.c index 25e4cf1b74..153e172037 100644 --- a/thread.c +++ b/thread.c @@ -1790,6 +1790,7 @@ rb_thread_io_blocking_call(rb_blocking_function_t *func, void *data1, int fd, in { EC_PUSH_TAG(ec); if ((state = EC_EXEC_TAG()) == TAG_NONE) { + volatile enum ruby_tag_type saved_state = state; /* for BLOCKING_REGION */ retry: BLOCKING_REGION(waiting_fd.th, { val = func(data1); @@ -1803,6 +1804,7 @@ rb_thread_io_blocking_call(rb_blocking_function_t *func, void *data1, int fd, in RUBY_VM_CHECK_INTS_BLOCKING(ec); goto retry; } + state = saved_state; } EC_POP_TAG();