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
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 ======= ======= ======= ======= ======= ======= ======= ======= ==== status( err) "status" ));
=======
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_
VALUE err;
{
- VALUE st = rb_iv_get(err, "status");
- return NUM2INT(st);
+ VALUE st = rb_attr_get(err, rb_intern(
+
+ return NIL_P(st) ? EXIT_FAILURE : NUM2INT(st);
}
static int process( sysexit_ status( ruby_errinfo) , 0, 0);
@@ -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_
break;
case RESTORE_NORMAL:
batsman@ tux-chan: ~/src/ruby/ ruby1.8$ cat fail.rb abort_on_ exception = true tux-chan: ~/src/ruby/ ruby1.8$ ./ruby -v fail.rb
Thread.
Thread.new { p foo }
batsman@
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