[#7102] Ruby 1.3.4-990611 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.4-990611 is out, check out:

20 messages 1999/06/11

[#7223] Ruby 1.3.4-990625 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.4-990625 is out, check out:

14 messages 1999/06/25
[#7224] -Wl,-rpath on Linux (Re: Ruby 1.3.4-990625) — Ryo HAYASAKA <hayasaka@...21.u-aizu.ac.jp> 1999/06/25

早坂@会津大学です。

[ruby-dev:7199] File object

From: Tadayoshi Funaba <tadf@...>
Date: 1999-06-23 12:32:39 UTC
List: ruby-dev #7199
ふなばです。

ruby-list でのファイルオブジェクトでの件で、ちょっと確認していて疑問が
でてきました。

ファイルオブジェクトを生成しつづけてみると、メモリが回収されていないよ
うな気がします。で、どうもつぎのようにすると、治まりそうです。


--- gc.c.orig	Fri Jun 11 15:29:53 1999
+++ gc.c	Wed Jun 23 20:49:13 1999
@@ -593,6 +593,9 @@
 	break;
 
       case T_FILE:
+	rb_mark_tbl(obj->as.file.iv_tbl);
+	break;
+
       case T_REGEXP:
       case T_FLOAT:
       case T_BIGNUM:
@@ -790,6 +793,9 @@
 	}
 	break;
       case T_FILE:
+	if (RANY(obj)->as.file.iv_tbl) {
+	    st_free_table(RANY(obj)->as.file.iv_tbl);
+	}
 	if (RANY(obj)->as.file.fptr) {
 	    rb_io_fptr_finalize(RANY(obj)->as.file.fptr);
 	    free(RANY(obj)->as.file.fptr);


あるいは、ファイルオブジェクトには、もう iv_tbl は必要ないのかという気
もします。


--- ruby.h.orig	Tue Jun  8 00:57:41 1999
+++ ruby.h	Wed Jun 23 21:03:56 1999
@@ -265,7 +265,6 @@
 
 struct RFile {
     struct RBasic basic;
-    struct st_table *iv_tbl;
     struct OpenFile *fptr;
 };

 
--- variable.c.orig	Wed Jun  9 18:21:33 1999
+++ variable.c	Wed Jun 23 21:01:42 1999
@@ -833,7 +833,6 @@
       case T_OBJECT:
       case T_CLASS:
       case T_MODULE:
-      case T_FILE:
 	if (ROBJECT(obj)->iv_tbl && st_lookup(ROBJECT(obj)->iv_tbl, id, &val))
 	    return val;
 	break;
@@ -860,7 +859,6 @@
       case T_OBJECT:
       case T_CLASS:
       case T_MODULE:
-      case T_FILE:
 	if (!ROBJECT(obj)->iv_tbl) ROBJECT(obj)->iv_tbl = st_init_numtable();
 	st_insert(ROBJECT(obj)->iv_tbl, id, val);
 	break;
@@ -880,7 +878,6 @@
       case T_OBJECT:
       case T_CLASS:
       case T_MODULE:
-      case T_FILE:
 	if (ROBJECT(obj)->iv_tbl && st_lookup(ROBJECT(obj)->iv_tbl, id, 0))
 	    return Qtrue;
 	break;
@@ -916,7 +913,6 @@
       case T_OBJECT:
       case T_CLASS:
       case T_MODULE:
-      case T_FILE:
 	ary = rb_ary_new();
 	if (ROBJECT(obj)->iv_tbl) {
 	    st_foreach(ROBJECT(obj)->iv_tbl, ivar_i, ary);
@@ -955,7 +951,6 @@
       case T_OBJECT:
       case T_CLASS:
       case T_MODULE:
-      case T_FILE:
 	if (ROBJECT(obj)->iv_tbl) {
 	    st_delete(ROBJECT(obj)->iv_tbl, &id, &val);
 	}


じつは、よくわかってないのですが、どうなんでしょう。
# なんか勘違いしてるかなあ

(0..24).each{|i|$><<('Itwu%hliqk`z)U|a{(hggcmr*'[i]^Math::PI*10**i%10).chr}

ふなば ただよし

In This Thread

Prev Next