summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cont.c3
-rw-r--r--test/ruby/test_fiber.rb6
-rw-r--r--version.h2
3 files changed, 6 insertions, 5 deletions
diff --git a/cont.c b/cont.c
index 7f971a9e9d..f1edd82bf0 100644
--- a/cont.c
+++ b/cont.c
@@ -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
diff --git a/version.h b/version.h
index f423165c28..73658c6ec7 100644
--- a/version.h
+++ b/version.h
@@ -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