Comment 1 for bug 23586

Revision history for this message
In , Mauricio Fernandez (mfp) wrote : Re: Exceptions in threads all get converted to a TypeError

On Wed, Aug 17, 2005 at 04:20:52AM +0900, Paul van Tilburg wrote:
> Hey all,
>
> I am using ruby1.8 from Debian unstable, which seems to be Ruby 1.8.2
> with some patches from CVS (ruby -v already returns 1.8.3). I am
> experiencing some problems with exceptions in Threads since a few
> days/weeks. They all seem to be converted to a TypeError, which makes
> debugging very hard for the app I am working on.

The example you provided in your bug report (reproduced below for the record)
seems to work fine after reverting part of the changes in revision 1.616.2.101
of eval.c:

Index: eval.c
===================================================================
RCS file: /src/ruby/eval.c,v
retrieving revision 1.616.2.117
diff -p -u -r1.616.2.117 eval.c
--- eval.c 16 Aug 2005 03:43:11 -0000 1.616.2.117
+++ eval.c 16 Aug 2005 22:38:44 -0000
@@ -1378,8 +1378,9 @@ static int
 sysexit_status(err)
     VALUE err;
 {
- VALUE st = rb_iv_get(err, "status");
- return NUM2INT(st);
+ VALUE st = rb_attr_get(err, rb_intern("status"));
+
+ return NIL_P(st) ? EXIT_FAILURE : NUM2INT(st);
 }

 static int
@@ -10070,6 +10071,7 @@ rb_thread_switch(n)
       case RESTORE_EXIT:
  ruby_errinfo = th_raise_exception;
  ruby_current_node = th_raise_node;
+ error_print();
  terminate_process(sysexit_status(ruby_errinfo), 0, 0);
  break;
       case RESTORE_NORMAL:

batsman@tux-chan:~/src/ruby/ruby1.8$ cat fail.rb
Thread.abort_on_exception = true
Thread.new { p foo }
batsman@tux-chan:~/src/ruby/ruby1.8$ ./ruby -v fail.rb
ruby 1.8.3 (2005-08-16) [i686-linux]
fail.rb:2: undefined local variable or method `foo' for main:Object (NameError)
        from fail.rb:2

--
Mauricio Fernandez