まつもと ゆきひろです

In message "[ruby-dev:22398] Re: Tk.callback_break causes seg-fault or hang-up"
    on 03/12/25, Yukihiro Matsumoto <matz / ruby-lang.org> writes:

|む、Tcl/Tkでpthreadを使ってない時にもsegvですか。
|それは気づいてなかったな。
|
|tracebackを見る限りはメモリ関係のバグに見えるのですが。

SEGVの方はメモリバグでした。以下のパッチで直ります。ただ、
pthreadがあるとハングするのはこれとは別の理由のようです。

--- eval.c	24 Dec 2003 19:38:15 -0000	1.616
+++ eval.c	25 Dec 2003 06:25:54 -0000
@@ -5644,3 +5644,3 @@ eval(self, src, scope, file, line)
 		if (!NIL_P(mesg) && TYPE(mesg) == T_STRING) {
-		    rb_str_update(mesg, 0, 0, RARRAY(errat)->ptr[0]);
+		    rb_str_prepend(mesg, RARRAY(errat)->ptr[0]);
 		}
--- string.c	30 Nov 2003 00:35:28 -0000	1.182
+++ string.c	25 Dec 2003 06:25:54 -0000
@@ -1453,2 +1453,11 @@ rb_str_insert(str, idx, str2)
 
+VALUE
+rb_str_prepend(str, str2)
+    VALUE str, str2;
+{
+    rb_str_modify(str);
+    rb_str_update(str, 0, 0, str2);
+    return str;
+}
+
 static VALUE
--- intern.h	21 Dec 2003 08:29:06 -0000	1.139
+++ intern.h	25 Dec 2003 06:25:54 -0000
@@ -412,2 +412,3 @@ VALUE rb_str_append _((VALUE, VALUE));
 VALUE rb_str_concat _((VALUE, VALUE));
+VALUE rb_str_prepend _((VALUE, VALUE));
 int rb_str_hash _((VALUE));
@@ -415,3 +416,2 @@ int rb_str_cmp _((VALUE, VALUE));
 VALUE rb_str_upto _((VALUE, VALUE, int));
-void rb_str_update _((VALUE, long, long, VALUE));
 VALUE rb_str_inspect _((VALUE));