diff options
-rw-r--r-- | cont.c | 3 | ||||
-rw-r--r-- | test/ruby/test_fiber.rb | 6 | ||||
-rw-r--r-- | version.h | 2 |
3 files changed, 6 insertions, 5 deletions
@@ -1796,7 +1796,7 @@ rb_fiber_new(rb_block_call_func_t func, VALUE obj) return fiber_initialize(fiber_alloc(rb_cFiber), rb_proc_new(func, obj), &shared_fiber_pool); } -static void rb_fiber_terminate(rb_fiber_t *fiber, int need_interrupt); +NORETURN(static void rb_fiber_terminate(rb_fiber_t *fiber, int need_interrupt)); #define PASS_KW_SPLAT (rb_empty_keyword_given_p() ? RB_PASS_EMPTY_KEYWORDS : rb_keyword_given_p()) @@ -2090,6 +2090,7 @@ rb_fiber_terminate(rb_fiber_t *fiber, int need_interrupt) next_fiber = return_fiber(); if (need_interrupt) RUBY_VM_SET_INTERRUPT(&next_fiber->cont.saved_ec); fiber_switch(next_fiber, 1, &value, 0, RB_NO_KEYWORDS); + ruby_stop(0); } VALUE diff --git a/test/ruby/test_fiber.rb b/test/ruby/test_fiber.rb index a7ed9ac7e0..20436eca69 100644 --- a/test/ruby/test_fiber.rb +++ b/test/ruby/test_fiber.rb @@ -318,7 +318,7 @@ class TestFiber < Test::Unit::TestCase Fiber.new {}.transfer Fiber.new { Fiber.yield } end - exit!(0) + exit!(true) end }.transfer _, status = Process.waitpid2(xpid) @@ -327,8 +327,8 @@ class TestFiber < Test::Unit::TestCase end.resume end pid, status = Process.waitpid2(pid) - assert_equal(0, status.exitstatus, bug5700) - assert_equal(false, status.signaled?, bug5700) + assert_not_predicate(status, :signaled?, bug5700) + assert_predicate(status, :success?, bug5700) end def test_exit_in_fiber @@ -2,7 +2,7 @@ # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR #define RUBY_VERSION_TEENY 6 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 212 +#define RUBY_PATCHLEVEL 213 #define RUBY_RELEASE_YEAR 2022 #define RUBY_RELEASE_MONTH 3 |