parent
5398a46889
commit
6747fbe77d
@ -1466,6 +1466,25 @@ assert_equal '[:ok, :ok]', %q{
|
|||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Ractor.select is interruptible
|
||||||
|
assert_normal_exit %q{
|
||||||
|
trap(:INT) do
|
||||||
|
exit
|
||||||
|
end
|
||||||
|
|
||||||
|
r = Ractor.new do
|
||||||
|
loop do
|
||||||
|
sleep 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Thread.new do
|
||||||
|
sleep 0.5
|
||||||
|
Process.kill(:INT, Process.pid)
|
||||||
|
end
|
||||||
|
Ractor.select(r)
|
||||||
|
}
|
||||||
|
|
||||||
# Ractor-local storage
|
# Ractor-local storage
|
||||||
assert_equal '[nil, "b", "a"]', %q{
|
assert_equal '[nil, "b", "a"]', %q{
|
||||||
ans = []
|
ans = []
|
||||||
|
6
ractor.c
6
ractor.c
@ -1804,17 +1804,17 @@ ractor_select_internal(rb_execution_context_t *ec, VALUE self, VALUE ractors, VA
|
|||||||
int state;
|
int state;
|
||||||
|
|
||||||
EC_PUSH_TAG(ec);
|
EC_PUSH_TAG(ec);
|
||||||
if ((state = EC_EXEC_TAG() == TAG_NONE)) {
|
if ((state = EC_EXEC_TAG()) == TAG_NONE) {
|
||||||
result = ractor_selector__wait(selector, do_receive, do_yield, yield_value, move);
|
result = ractor_selector__wait(selector, do_receive, do_yield, yield_value, move);
|
||||||
}
|
}
|
||||||
else {
|
EC_POP_TAG();
|
||||||
|
if (state != TAG_NONE) {
|
||||||
// ensure
|
// ensure
|
||||||
ractor_selector_clear(selector);
|
ractor_selector_clear(selector);
|
||||||
|
|
||||||
// jump
|
// jump
|
||||||
EC_JUMP_TAG(ec, state);
|
EC_JUMP_TAG(ec, state);
|
||||||
}
|
}
|
||||||
EC_POP_TAG();
|
|
||||||
|
|
||||||
RB_GC_GUARD(ractors);
|
RB_GC_GUARD(ractors);
|
||||||
return result;
|
return result;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user