Tietew です。
以下のコードがタイムアウトしません。Ctrl+C も効かなくなります。
require 'timeout'
timeout(60) { load 'block.rb' }
--- block.rb
loop { }
---
loop { Thread.pass } にするとちゃんtスレッドが切り替わるので,
こんな感じにすれば旨く動いていますが,修正がこれでいいか自信があ
りません。
Index: eval.c
===================================================================
RCS file: /src/ruby/eval.c,v
retrieving revision 1.566
diff -p -u -2 -r1.566 eval.c
--- eval.c 15 Oct 2003 06:00:57 -0000 1.566
+++ eval.c 20 Oct 2003 04:59:11 -0000
@@ -5748,5 +5748,5 @@ rb_load(fname, wrap)
{
VALUE tmp;
- int state;
+ int state, allowed_ints;
volatile ID last_func;
volatile VALUE wrapper = 0;
@@ -5805,4 +5805,5 @@ rb_load(fname, wrap)
DEFER_INTS;
+ allowed_ints = 0;
ruby_in_eval++;
critical = rb_thread_critical;
@@ -5812,9 +5813,12 @@ rb_load(fname, wrap)
node = ruby_eval_tree;
rb_thread_critical = critical;
+ allowed_ints = 1;
+ ALLOW_INTS;
if (ruby_nerrs == 0) {
eval_node(self, node);
}
}
- ALLOW_INTS;
+ if(!allowed_ints)
+ ALLOW_INTS;
ruby_frame->last_func = last_func;
ruby_current_node = last_node;
―[ Tietew ]――――――――――――――――――――――――――
メ : tietew / tietew.net / tietew / raug.net / tietew / masuclub.net
ホペ: http://www.tietew.net/ Tietew Windows Lab.
http://www.masuclub.net/ 鱒倶楽部
指紋: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA