[#29170] Call for Papers Linux Conference 2001 — akira yamada / やまだあきら <akira@...>

18 messages 2001/04/10
[#30213] Re: Call for Papers Linux Conference 2001 — akira yamada / やまだあきら <akira@...> 2001/06/13

[#29190] Time Stamp Copy of File.copy — "たけ(tk)" <ggb03124@...>

 ftools.rb の move では utime を行っていて日付が同じになりますが、copy

42 messages 2001/04/11
[#29193] Re: Time Stamp Copy of File.copy — matz@... (Yukihiro Matsumoto) 2001/04/11

まつもと ゆきひろです

[#29201] Re: Time Stamp Copy of File.copy — " たけ (tk)" <ggb03124@...> 2001/04/11

たけ(tk)です。

[#29203] Re: Time Stamp Copy of File.copy — WATANABE Hirofumi <eban@...> 2001/04/11

わたなべです.

[#29212] Re: Time Stamp Copy of File.copy — Minero Aoki <aamine@...> 2001/04/12

あおきです。

[#29215] Re: Time Stamp Copy of File.copy — " たけ (tk)" <ggb03124@...> 2001/04/12

たけ(tk)です。

[#29220] Re: Time Stamp Copy of File.copy — Minero Aoki <aamine@...> 2001/04/12

あおきです。

[#29234] Re: Time Stamp Copy of File.copy — " たけ (tk)" <ggb03124@...> 2001/04/13

たけ(tk)です。

[#29236] Re: Time Stamp Copy of File.copy — matz@... (Yukihiro Matsumoto) 2001/04/13

まつもと ゆきひろです

[#29238] Array#include! — " たけ (tk)" <ggb03124@...> 2001/04/13

たけ(tk)です。

[#29244] Re: Array#include! — matz@... (Yukihiro Matsumoto) 2001/04/13

まつもと ゆきひろです

[#29348] Open3 — NISHIO Mizuho <mzh@...>

どうも西尾です。

16 messages 2001/04/20

[#29397] rnet.rb 〜高レベルネットライブラリ〜 — rubikitch <rubikitch@...>

るびきちです。

11 messages 2001/04/24

[ruby-list:29228] Re: Ruby プロセスが肥大化していく

From: "K.Kosako" <kosako@...>
Date: 2001-04-13 03:49:04 UTC
List: ruby-list #29228
Tachino Nobuhiroさんの
<g0fdsjyl.wl@frostrubin.open.nm.fujitsu.co.jp>から
>   メモリリークはなくなったのですが、下の変なスクリプトを実行すると
> assign()がrb_bug("bug in variableassignment")を呼んでコアダンプする
> ようになってしまいました。
> 
> def func
>     t = Thread.start {}
>     t.join
>     yield t
> end
> 
> loop do
>     func {|x| x = 3}
>     ObjectSpace.garbage_collect
> end

以下で、とりあえずメモリリークとコアダンプは
なくなるように思います。
(これ以降はruby-devが適当?)

--- eval.c.orig	Tue Apr 10 15:09:00 2001
+++ eval.c	Fri Apr 13 12:40:48 2001
@@ -8081,6 +8081,7 @@
     volatile VALUE thread = th->thread;
     enum thread_status status;
     int state;
+    struct BLOCK* saved_block = 0;
 
 #if defined(HAVE_SETITIMER)
     if (!thread_init) {
@@ -8096,7 +8097,19 @@
 #endif
 
     if (ruby_block) {		/* should nail down higher scopes */
-	blk_copy_prev(ruby_block);
+	struct BLOCK dummy;
+	struct BLOCK* p;
+	struct RVarmap* vars;
+
+	dummy.prev = ruby_block;
+	blk_copy_prev(&dummy);
+	saved_block = ruby_block = dummy.prev;
+	for (p = ruby_block; p; p = p->prev) {
+	  for (vars = p->dyna_vars; vars; vars = vars->next) {
+	    if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break;
+	    FL_SET(vars, DVAR_DONT_RECYCLE);
+	  }
+	}
     }
     scope_dup(ruby_scope);
     FL_SET(ruby_scope, SCOPE_SHARED);
@@ -8123,6 +8136,18 @@
     }
     POP_TAG();
     status = th->status;
+
+    if (saved_block) {
+       struct BLOCK *data = saved_block;
+       while (data) {
+           struct BLOCK *tmp = data;
+           if (data->frame.argc > 0)
+               free(data->frame.argv);
+           data = data->prev;
+           free(tmp);
+       }
+    }
+
     if (th == main_thread) ruby_stop(state);
     rb_thread_remove(th);
     if (state && status != THREAD_TO_KILL && !NIL_P(ruby_errinfo)) {
----
小迫@ソフネック   渋谷区恵比寿1-15-1

In This Thread