eregontp / gmail.com 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:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>