[#23480] [BUG] numeric.c (flo_to_s) broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

19 messages 2004/05/08
[#23482] Re: [BUG] numeric.c (flo_to_s) broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/08

山本です。

[#23483] Re: [BUG] numeric.c (flo_to_s) broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/08

山本です。

[#23484] Re: [BUG] numeric.c (flo_to_s) broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/08

山本です。

[#23485] Re: [BUG] numeric.c (flo_to_s) broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/08

山本です。たびたびすみません。

[#23486] Re: [BUG] numeric.c (flo_to_s) broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/08

山本です。

[#23499] Re: [BUG] numeric.c (flo_to_s) broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/14

山本です。

[#23488] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console, ruby/test, ruby/test/drb, ruby/test/ruby, ruby/test/soap/calc: * ext/extmk.rb (extmake): skip uncompiled extensions. — MIYAMUKO Katsuyuki <k-miyamuko@...>

みやむこです。

18 messages 2004/05/11
[#23527] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test, ruby/test/drb, ruby/test/ruby, ruby/test/soap/calc: * ext/extmk.rb(extmake): skip uncompiled extensions. — nobu.nakada@... 2004/05/17

なかだです。

[#23537] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test, ruby/test/drb, ruby/test/ruby, ruby/test/soap/calc: * ext/extmk.rb(extmake): skip uncompiled extensions. — MIYAMUKO Katsuyuki <k-miyamuko@...> 2004/05/18

みやむこです。

[#23538] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test,ruby/test/drb, ruby/test/ruby, ruby/test/soap/calc: * ext/extmk.rb(extmake):skip uncompiled extensions. — nobu.nakada@... 2004/05/19

なかだです。

[#23539] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test,ruby/test/drb, ruby/test/ruby, ruby/test/soap/calc: * ext/extmk.rb(extmake):skip uncompiled extensions. — MIYAMUKO Katsuyuki <k-miyamuko@...> 2004/05/19

みやむこです。

[#23543] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test,ruby/test/drb,ruby/test/ruby, ruby/test/soap/calc: * ext/extmk.rb(extmake):skip uncompiledextensions. — nobu.nakada@... 2004/05/19

なかだです。

[#23555] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test,ruby/test/drb,ruby/test/ruby, ruby/test/soap/calc: * ext/extmk.rb(extmake):skip uncompiledextensions. — MIYAMUKO Katsuyuki <k-miyamuko@...> 2004/05/21

みやむこです。

[#23557] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test,ruby/test/drb,ruby/test/ruby,ruby/test/soap/calc: * ext/extmk.rb(extmake):skip uncompiledextensions. — nobu.nakada@... 2004/05/21

なかだです。

[#23559] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test,ruby/test/drb,ruby/test/ruby,ruby/test/soap/calc: * ext/extmk.rb(extmake):skip uncompiledextensions. — MIYAMUKO Katsuyuki <k-miyamuko@...> 2004/05/21

みやむこです。

[#23492] ruby 1.8.1 (2004-05-13) has 7 failures and 3 errors — akira yamada <akira@...>

19 messages 2004/05/13

[#23533] Ruby2.0 spec summary around parameters and variables — SASADA Koichi <ko1@...>

 ささだです。

22 messages 2004/05/17
[#23563] Re: Ruby2.0 spec summary around parameters and variables — Minero Aoki <aamine@...> 2004/05/22

青木です。

[#23564] Re: Ruby2.0 spec summary around parameters and variables — matz@... (Yukihiro Matsumoto) 2004/05/22

まつもと ゆきひろです

[#23568] Re: Ruby2.0 spec summary around parameters and variables — Minero Aoki <aamine@...> 2004/05/22

青木です。

[#23569] Re: Ruby2.0 spec summary around parameters and variables — matz@... (Yukihiro Matsumoto) 2004/05/22

まつもと ゆきひろです

[#23572] keyword argments (Ruby2.0 spec) — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

14 messages 2004/05/23
[#23578] Re: keyword argments (Ruby2.0 spec) — matz@... (Yukihiro Matsumoto) 2004/05/23

まつもと ゆきひろです

[#23615] console freezed on test/drb/drbtest.rb : test_06_timeout (bcc32) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

11 messages 2004/05/25
[#23625] Re: console freezed on test/drb/drbtest.rb : test_06_timeout (bcc32) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/26

山本です。

[ruby-dev:23630] NEWOBJ() in dfree

From: nobu.nakada@...
Date: 2004-05-26 11:23:08 UTC
List: ruby-dev #23630
なかだです。

以前にも似た話があったような気もしますが、[ruby-core:02867]が気
になったので、RDATA()->dfreeの中でオブジェクトを作るとheapが壊
れるというのを調べてみました。

例えば、こういう拡張ライブラリでオブジェクトを大量に作るとSEGV
します。

-------------------- gctest.c
#include <ruby.h>

static VALUE rb_cGCTest;

static void gctest_free _((void *));

static void
gctest_free(void *ptr)
{
    Data_Wrap_Struct(rb_cData, 0, 0, ptr);
}

static VALUE
gctest_alloc(VALUE klass)
{
    return Data_Wrap_Struct(klass, 0, gctest_free, NULL);
}

static VALUE
gctest_init(VALUE obj, VALUE val)
{
    DATA_PTR(obj) = (void *)NUM2LONG(val);
    return obj;
}

void
Init_gctest(void)
{
    rb_cGCTest = rb_define_class("GCTest", rb_cData);
    rb_define_alloc_func(rb_cGCTest, gctest_alloc);
    rb_define_method(rb_cGCTest, "initialize", gctest_init, 1);
}
--------------------

freelist == 0の状態でrb_newobj()を呼ぶとadd_heap()で新しく確保
されたslotがfreelistに連結されるけれど、そこで割り当てられたオ
ブジェクトはmark時には存在していないので全部解放されてしまい、
slotごと解放されます。しかし、freelistはそのslotをsweepし始めた
時点のものに戻されて、無効なページを指したままになる、というこ
とのようです。


* gc.c (gc_sweep): do not dispose slots allocated while sweeping.


Index: gc.c
===================================================================
RCS file: /cvs/ruby/src/ruby/gc.c,v
retrieving revision 1.176
diff -U2 -p -d -r1.176 gc.c
--- gc.c	7 May 2004 08:44:14 -0000	1.176
+++ gc.c	26 May 2004 11:09:25 -0000
@@ -312,4 +312,9 @@ static int heaps_length = 0;
 static int heaps_used   = 0;
 
+static struct {
+    RVALUE *head, *tail;
+    int count;
+} freeinglist;
+
 #define HEAP_MIN_SLOTS 10000
 static int heap_slots = HEAP_MIN_SLOTS;
@@ -1008,10 +1013,11 @@ gc_sweep()
     final_list = deferred_final_list;
     deferred_final_list = 0;
-    for (i = 0; i < heaps_used; i++) {
+    for (i = 0, j = heaps_used; i < j; i++) {
 	int n = 0;
-	RVALUE *free = freelist;
 	RVALUE *final = final_list;
 
 	p = heaps[i].slot; pend = p + heaps[i].limit;
+	freeinglist.head = 0;
+	freeinglist.count = 0;
 	while (p < pend) {
 	    if (!(p->as.basic.flags & FL_MARK)) {
@@ -1023,11 +1029,13 @@ gc_sweep()
 		    p->as.free.next = final_list;
 		    final_list = p;
+		    n++;
 		}
 		else {
 		    p->as.free.flags = 0;
-		    p->as.free.next = freelist;
-		    freelist = p;
+		    p->as.free.next = freeinglist.head;
+		    if (!freeinglist.head) freeinglist.tail = p;
+		    freeinglist.head = p;
+		    freeinglist.count++;
 		}
-		n++;
 	    }
 	    else if (RBASIC(p)->flags == FL_MARK) {
@@ -1041,4 +1049,5 @@ gc_sweep()
 	    p++;
 	}
+	n += freeinglist.count;
 	if (n == heaps[i].limit && freed > FREE_MIN) {
 	    RVALUE *pp;
@@ -1048,9 +1057,14 @@ gc_sweep()
 		p->as.free.flags |= FL_SINGLETON; /* freeing page mark */
 	    }
-	    freelist = free;	/* cancel this page from freelist */
 	}
 	else {
+	    if (freeinglist.head) {
+		freeinglist.tail->as.free.next = freelist;
+		freelist = freeinglist.head;
+	    }
 	    freed += n;
 	}
+	freeinglist.head = 0;
+	freeinglist.count = 0;
     }
     if (malloc_increase > malloc_limit) {
@@ -1292,4 +1306,9 @@ rb_gc()
     }
 #endif
+    if (!freelist && (freelist = freeinglist.head)) {
+	freeinglist.head = 0;
+	freeinglist.count = 0;
+	return;
+    }
     if (dont_gc || during_gc) {
 	if (!freelist) {


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

In This Thread

Prev Next