[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ruby-core
Subject:    [ruby-core:105086] [Ruby master Feature#18139] Add a method to stop/kill a Ractor from outside
From:       "tagomoris (Satoshi TAGOMORI)" <noreply () ruby-lang ! org>
Date:       2021-08-30 2:40:46
Message-ID: redmine.journal-93494.20210830024046.1855 () ruby-lang ! org
[Download RAW message or body]

Issue #18139 has been updated by tagomoris (Satoshi TAGOMORI).


The alternative idea to make it stoppable is to add a method/runtime-feature to \
select both I/O and Ractor (like golang's `select`), but I think `Ractor#kill` (or \
something like that) should be able to support wide use-cases.

----------------------------------------
Feature #18139: Add a method to stop/kill a Ractor from outside
https://bugs.ruby-lang.org/issues/18139#change-93494

* Author: tagomoris (Satoshi TAGOMORI)
* Status: Open
* Priority: Normal
----------------------------------------
When a Ractor is doing I/O, it can'tf stop by itself (even when I/O is nonblock, \
IO.select will block).

```ruby
r = Ractor.new(listen) { |listen|
  while connection = listen.accept
    # process
  end
}

Signal.trap(:INT) { r.kill } # I want to do this
# or r.stop, r.interrupt
# or r.raise(MyStopSignalError)
```

If a Ractor's input is Ractor.receive only, it can stop itself when it receives a \
stop signal (via Ractor.receive). But the Ractor is doing I/O, it can't listen \
Ractor.receive. So there are no any channels to tell it should stop. Under the \
current situation, we can only stop the entire runtime at once without any shutdown \
processes.

So, I want a method to kill or interrupt the Ractor, or to raise an exception in that \
Ractor from the outside.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic