[#23332] to_str再考 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

15 messages 2004/04/05

[#23380] [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

17 messages 2004/04/15
[#23400] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。落ちる場所がわかりました。

[#23402] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23403] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — nobu.nakada@... 2004/04/16

なかだです。

[#23405] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23407] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[ruby-dev:23342] Re: Zlib::GzipWriter.new(nil).close dumps core

From: nobu.nakada@...
Date: 2004-04-06 13:20:32 UTC
List: ruby-dev #23342
なかだです。

At Fri, 26 Mar 2004 18:11:04 +0900,
Yukihiro Matsumoto wrote in [ruby-dev:23231]:
> |マークされているはずのオブジェクトがGCされてるってのは、終了時
> |のfinalizerの実行順序は予測できないからでしたっけ?
> 
> そうなんです。別件で数日前から悩んでいるのですが、結論が出て
> いません。なんかいい手はないかなあ。

やっぱり[ruby-dev:23230]だけじゃ不十分のようですが、とりあえず
test_zlib.rbでstack overflowしてcore吐くのは嬉しくないので、場
当たり的ながら。


* io.c (rb_write_error2): write to system stderr when rb_stderr is not
  alive.

* ruby.h (OBJ_ALIVE_P): return true if object is alive.


Index: io.c
===================================================================
RCS file: /cvs/ruby/src/ruby/io.c,v
retrieving revision 1.267
diff -U2 -p -d -r1.267 io.c
--- io.c	5 Apr 2004 15:55:06 -0000	1.267
+++ io.c	6 Apr 2004 08:03:30 -0000
@@ -3682,4 +3682,8 @@ rb_write_error2(mesg, len)
     long len;
 {
+    if (SPECIAL_CONST_P(rb_stderr) || !OBJ_ALIVE_P(rb_stderr)) {
+	fwrite(mesg, 1, len, stderr);
+	return;
+    }
     rb_io_write(rb_stderr, rb_str_new(mesg, len));
 }
Index: ruby.h
===================================================================
RCS file: /cvs/ruby/src/ruby/ruby.h,v
retrieving revision 1.103
diff -U2 -p -d -r1.103 ruby.h
--- ruby.h	31 Mar 2004 03:05:22 -0000	1.103
+++ ruby.h	6 Apr 2004 05:51:23 -0000
@@ -456,4 +456,6 @@ struct RBignum {
 #define OBJ_FREEZE(x) FL_SET((x), FL_FREEZE)
 
+#define OBJ_ALIVE_P(x) (SPECIAL_CONST_P(x) || !BUILTIN_TYPE(x)->flags)
+
 #define ALLOC_N(type,n) (type*)xmalloc(sizeof(type)*(n))
 #define ALLOC(type) (type*)xmalloc(sizeof(type))
Index: ext/zlib/zlib.c
===================================================================
RCS file: /cvs/ruby/src/ruby/ext/zlib/zlib.c,v
retrieving revision 1.10
diff -U2 -p -d -r1.10 zlib.c
--- ext/zlib/zlib.c	28 Mar 2004 14:10:39 -0000	1.10
+++ ext/zlib/zlib.c	6 Apr 2004 05:51:25 -0000
@@ -14,6 +14,4 @@
 
 
-#define OBJ_IS_FREED(val)  (RBASIC(val)->flags == 0)
-
 #ifndef GZIP_SUPPORT
 #define GZIP_SUPPORT  1
@@ -2159,5 +2157,5 @@ gzfile_writer_end(gz)
     if (ZSTREAM_IS_FINALIZE(&gz->z)) {
 	rb_warn("Zlib::GzipWriter object must be closed explicitly.");
-	if (OBJ_IS_FREED(gz->io)) {
+	if (!OBJ_ALIVE_P(gz->io)) {
 	    aborted = 1;
 	}


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread