[ruby-core:87583] Re: [Ruby trunk Feature#14859] [PATCH] implement Timeout in VM

From: Eric Wong <normalperson@...>
Date: 2018-06-21 20:08:44 UTC
List: ruby-core #87583
[email protected] wrote:
> Something else, I would consider Timeout to be fundamentally
> flawed as long as it relies on Thread#raise, because it can
> fire in the middle of an ensure block:
> http://headius.blogspot.com/2008/02/rubys-threadraise-threadkill-timeoutrb.html

We have Thread.handle_interrupt, nowadays, to control when
interrupts fire.

> Maybe IO#write_nonblock and such should directly accept a
> timeout argument and other changes to make the API easier to
> use?

I considered that, too, but we'd need to add timeouts to every
single method which can block.  There are many:  File.open, Queue#pop,
SizedQueue#push, Mutex#lock/synchronize, Process.wait*,
IO#gets, IO#write, IO#read, IO#getc, IO.copy_stream, ...

Pretty much every IO method needs to be changed and callers
need to be rewritten.

Things like File.open and Process.wait* don't have timeouts
in the underlying syscall, so we'd still have to use a timer
thread or POSIX timers to interrupt them on timeout.

The goal is to make all those methods aware of Timeout
without changing existing user code at all.

Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next