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
13
eval.c
13
eval.c
@ -162,7 +162,11 @@ static void
|
|||||||
rb_ec_scheduler_finalize(rb_execution_context_t *ec)
|
rb_ec_scheduler_finalize(rb_execution_context_t *ec)
|
||||||
{
|
{
|
||||||
rb_thread_t *thread = rb_ec_thread_ptr(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
|
static void
|
||||||
@ -217,6 +221,10 @@ rb_ec_cleanup(rb_execution_context_t *ec, volatile int ex)
|
|||||||
|
|
||||||
rb_threadptr_interrupt(th);
|
rb_threadptr_interrupt(th);
|
||||||
rb_threadptr_check_signal(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);
|
EC_PUSH_TAG(ec);
|
||||||
if ((state = EC_EXEC_TAG()) == TAG_NONE) {
|
if ((state = EC_EXEC_TAG()) == TAG_NONE) {
|
||||||
th = th0;
|
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.
|
mjit_finish(true); // We still need ISeqs here.
|
||||||
|
|
||||||
rb_ec_finalize(ec);
|
rb_ec_finalize(ec);
|
||||||
|
@ -35,4 +35,18 @@ class TestFiberScheduler < Test::Unit::TestCase
|
|||||||
|
|
||||||
thread.join
|
thread.join
|
||||||
end
|
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
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user