mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Fix order of operations during rb_ec_finalize
.
This commit is contained in:
parent
48b94b7919
commit
388281c5c9
Notes:
git
2020-09-30 12:35:11 +09:00
2 changed files with 23 additions and 4 deletions
13
eval.c
13
eval.c
|
@ -162,7 +162,11 @@ static void
|
|||
rb_ec_scheduler_finalize(rb_execution_context_t *ec)
|
||||
{
|
||||
rb_thread_t *thread = rb_ec_thread_ptr(ec);
|
||||
rb_thread_scheduler_set(thread->self, Qnil);
|
||||
EC_PUSH_TAG(ec);
|
||||
if (EC_EXEC_TAG() == TAG_NONE) {
|
||||
rb_thread_scheduler_set(thread->self, Qnil);
|
||||
}
|
||||
EC_POP_TAG();
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -217,6 +221,10 @@ rb_ec_cleanup(rb_execution_context_t *ec, volatile int ex)
|
|||
|
||||
rb_threadptr_interrupt(th);
|
||||
rb_threadptr_check_signal(th);
|
||||
|
||||
// If the user code defined a scheduler for the top level thread, run it:
|
||||
rb_ec_scheduler_finalize(ec);
|
||||
|
||||
EC_PUSH_TAG(ec);
|
||||
if ((state = EC_EXEC_TAG()) == TAG_NONE) {
|
||||
th = th0;
|
||||
|
@ -278,9 +286,6 @@ rb_ec_cleanup(rb_execution_context_t *ec, volatile int ex)
|
|||
}
|
||||
}
|
||||
|
||||
// If the user code defined a scheduler for the top level thread, run it:
|
||||
rb_ec_scheduler_finalize(ec);
|
||||
|
||||
mjit_finish(true); // We still need ISeqs here.
|
||||
|
||||
rb_ec_finalize(ec);
|
||||
|
|
|
@ -35,4 +35,18 @@ class TestFiberScheduler < Test::Unit::TestCase
|
|||
|
||||
thread.join
|
||||
end
|
||||
|
||||
def test_close_at_exit
|
||||
assert_in_out_err %W[-I#{__dir__} -], <<-RUBY, ['Running Fiber'], [], success: true
|
||||
require 'scheduler'
|
||||
|
||||
scheduler = Scheduler.new
|
||||
Thread.current.scheduler = scheduler
|
||||
|
||||
Fiber.schedule do
|
||||
sleep(0)
|
||||
puts "Running Fiber"
|
||||
end
|
||||
RUBY
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue