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