[#15359] Timeout::Error — Jeremy Thurgood <jerith@...>

Good day,

41 messages 2008/02/05
[#15366] Re: Timeout::Error — Eric Hodel <drbrain@...7.net> 2008/02/06

On Feb 5, 2008, at 06:20 AM, Jeremy Thurgood wrote:

[#15370] Re: Timeout::Error — Jeremy Thurgood <jerith@...> 2008/02/06

Eric Hodel wrote:

[#15373] Re: Timeout::Error — Nobuyoshi Nakada <nobu@...> 2008/02/06

Hi,

[#15374] Re: Timeout::Error — Jeremy Thurgood <jerith@...> 2008/02/06

Nobuyoshi Nakada wrote:

[#15412] Re: Timeout::Error — Nobuyoshi Nakada <nobu@...> 2008/02/07

Hi,

[#15413] Re: Timeout::Error — Jeremy Thurgood <jerith@...> 2008/02/07

Nobuyoshi Nakada wrote:

[#15414] Re: Timeout::Error — Nobuyoshi Nakada <nobu@...> 2008/02/07

Hi,

[#15360] reopen: can't change access mode from "w+" to "w"? — Sam Ruby <rubys@...>

I ran 'rake test' on test/spec [1], using

16 messages 2008/02/05
[#15369] Re: reopen: can't change access mode from "w+" to "w"? — Nobuyoshi Nakada <nobu@...> 2008/02/06

Hi,

[#15389] STDIN encoding differs from default source file encoding — Dave Thomas <dave@...>

This seems strange:

21 messages 2008/02/06
[#15392] Re: STDIN encoding differs from default source file encoding — Yukihiro Matsumoto <matz@...> 2008/02/06

Hi,

[#15481] very bad character performance on ruby1.9 — "Eric Mahurin" <eric.mahurin@...>

I'd like to bring up the issue of how characters are represented in

16 messages 2008/02/10

[#15528] Test::Unit maintainer — Kouhei Sutou <kou@...>

Hi Nathaniel, Ryan,

22 messages 2008/02/13

[#15551] Proc#curry — ts <decoux@...>

21 messages 2008/02/14
[#15557] Re: [1.9] Proc#curry — David Flanagan <david@...> 2008/02/15

ts wrote:

[#15558] Re: [1.9] Proc#curry — Yukihiro Matsumoto <matz@...> 2008/02/15

Hi,

[#15560] Re: Proc#curry — Trans <transfire@...> 2008/02/15

[#15585] Ruby M17N meeting summary — Martin Duerst <duerst@...>

This is a rough translation of the Japanese meeting summary

19 messages 2008/02/18

[#15596] possible bug in regexp lexing — Ryan Davis <ryand-ruby@...>

current:

17 messages 2008/02/19

[#15678] Re: [ANN] MacRuby — "Rick DeNatale" <rick.denatale@...>

On 2/27/08, Laurent Sansonetti <laurent.sansonetti@gmail.com> wrote:

18 messages 2008/02/28
[#15679] Re: [ANN] MacRuby — "Laurent Sansonetti" <laurent.sansonetti@...> 2008/02/28

On Thu, Feb 28, 2008 at 6:33 AM, Rick DeNatale <rick.denatale@gmail.com> wrote:

[#15680] Re: [ANN] MacRuby — Yukihiro Matsumoto <matz@...> 2008/02/28

Hi,

[#15683] Re: [ANN] MacRuby — "Laurent Sansonetti" <laurent.sansonetti@...> 2008/02/28

On Thu, Feb 28, 2008 at 1:51 PM, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:

Re: Timeout::Error

From: Kurt Stephens <ks@...>
Date: 2008-02-07 00:37:57 UTC
List: ruby-core #15397
Charles Oliver Nutter wrote:
> Jeremy Thurgood wrote:
>> Jim Hranicky wrote:
>>> Jeremy Thurgood wrote:
>>>
>>>>> No.  The exception would be rescued inappropriately then.
>>>> At the moment it's being /not/ rescued inappropriately. Why should a
>>>> timeout exception (from within the standard libraries!) evade a
>>>> naked "rescue"? The current situation requires me to figure out
>>>> everythign that can possibly time out and add special-case error
>>>> handling for it. Worse than this, irb doesn't catch Timeout::Error
>>>> and thus kills my session (which typically has a bunch of state in
>>>> it) whenever the http server I'm talking to takes a while to respond.
>>>
>>> While I tend to agree and ran into the same frustration as you, you can
>>> specify the type of exception Timeout throws like so:
>>>
>>>    timeout(5, StandardError) { ... }
>>>
>>> which seems to do what's desired,
>>>
>>>      ruby -rtimeout -e 'begin ; timeout(5, StandardError) { while
>>> true; sleep 1; end }; \
>>>      rescue; puts "rescued" ; end'
>>
>> Sure, if it's my code that's throwing the timeout. net/protocol.rb and
>> net/http.rb aren't mine and I'm hesitant to monkey-patch them to throw
>> different exceptions when I'm also using other libraries which use them.
>>
>> A quick grep through /usr/lib/ruby/1.8 shows at least the following
>> files using timeout without specifying a different exception to use:
> 
> This is exactly why timeout is a bad idea. Being able to cause the
> calling thread to throw arbitrary exceptions means that all callers to
> all libraries run the risk of having exceptions bubble out they never
> expected. In this case, calling any of the net/* libraries requires the
> caller to also handle timeout errors.
> 
> timeout.rb should be abolished, and the net libraries rewritten to use
> select for IO. Other libraries that use timeout should use safer
> mechanisms that don't require the ability to arbitrarily interrupt a
> calling thread.
> 
> - Charlie
> 

  We use Timeout frequently for computations that we explicitly want to
stop after a specific amount of time; we have hard timing constraints.
If we can't compute it in time, we need to decide on a different course
of action.

  Since Timeout exceptions are an explicit and expected part of a
program's behavior, it makes sense to distinguish them from typically
unexpected errors (i.e. StandardError).  The net libraries should
probably be fixed rethrow its own Timeouts into some API-specific
subclass of Exception.  The only thing that is "exceptional" about
Timeout errors is the delivery mechanism.

  It's a good idea for general-purpose libraries like net/* to have
hooks into a top-level event loop manager (via select()).  But removing
the Timeout mechanism, would be a disaster for encapsulation and
programmer's efficiency.  Having to use a globally-defined callback
(like C's signal(SIGALRM)/alarm()) is far more painful than the
thread-safe ruby Timeout delivery mechanism.

If irb is not trapping Timeout, it's broken,
APIs that leak Timeouts are broken,
Ruby is not broken.

http://kurtstephens.com

P.S.: Restartable exceptions would be a great feature for Ruby.

In This Thread