[#14850] str[re, -1] raises NoMemoryError — nobu.nakada@...
なかだです。
6 messages
2001/10/03
[#14888] perl6 apocalypse 3 — nobu.nakada@...
なかだです。
7 messages
2001/10/04
[#14903] Re: [rubyist:0825] Re: Thread — nobu.nakada@...
なかだです。
8 messages
2001/10/09
[#14909] ext/socket h_addr_list — WATANABE Tetsuya <tetsu@...>
渡辺哲也です。
9 messages
2001/10/11
[#14922] alias $gvar — Koji Arai <JCA02266@...>
新井です。
19 messages
2001/10/14
[#14941] Re: alias $gvar
— matz@... (Yukihiro Matsumoto)
2001/10/16
まつもと ゆきひろです
[#14924] Re: alias $gvar
— nobu.nakada@...
2001/10/14
なかだです。
[#14932] Re: alias $gvar
— nobu.nakada@...
2001/10/15
なかだです。
[#14934] Re: alias $gvar
— Koji Arai <JCA02266@...>
2001/10/15
新井です。
[#14942] [BUG] SEGV: module_eval — Satoru Takabayashi <satoru@...>
こんなことする方が悪いという気がしますが、次のコードを実行す
5 messages
2001/10/16
[#14961] [PATCH] Marshal.load/dump — nobu.nakada@...
なかだです。
9 messages
2001/10/18
[#14962] alias var and trace_var — "K.Kosako" <kosako@...>
新井さんの指摘から、中田さんのパッチで
12 messages
2001/10/19
[#14963] Re: alias var and trace_var
— nobu.nakada@...
2001/10/19
なかだです。
[#14965] Re: alias var and trace_var
— "K.Kosako" <kosako@...>
2001/10/19
nobu.nakada@nifty.ne.jpさんの
[#14967] Re: alias var and trace_var
— nobu.nakada@...
2001/10/19
なかだです。
[#14971] Re: alias var and trace_var
— "K.Kosako" <kosako@...>
2001/10/22
nobu.nakada@nifty.ne.jpさんの
[#14984] [PATCH] stack overflow while GC marking. — nobu.nakada@...
なかだです。
7 messages
2001/10/23
[#14987] tracer.rb — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
5 messages
2001/10/23
[#14998] TCPSocket.gethostbyname で Segmentation fault — tomohiko machida <machida@...>
はじめまして。
4 messages
2001/10/25
[#15001] finalizer problem — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
3 messages
2001/10/25
[#15006] Re: eval.c (rb_stack_check): prohibit recursive raising error — WATANABE Hirofumi <eban@...>
わたなべです。
13 messages
2001/10/26
[#15008] Re: eval.c (rb_stack_check): prohibit recursive raising error
— Shugo Maeda <shugo@...>
2001/10/26
前田です。
[#15207] Re: eval.c (rb_stack_check): prohibit recursive raising error
— nobu.nakada@...
2001/11/19
なかだです。
[#15209] Re: eval.c (rb_stack_check): prohibit recursive raising error
— matz@... (Yukihiro Matsumoto)
2001/11/19
まつもと ゆきひろです
[#15210] Re: eval.c (rb_stack_check): prohibit recursive raising error
— nobu.nakada@...
2001/11/19
なかだです。
[#15211] Re: eval.c (rb_stack_check): prohibit recursive raising error
— matz@... (Yukihiro Matsumoto)
2001/11/19
まつもと ゆきひろです
[#15212] Re: eval.c (rb_stack_check): prohibit recursive raising error
— nobu.nakada@...
2001/11/19
なかだです。
[#15214] Re: eval.c (rb_stack_check): prohibit recursive raising error
— matz@... (Yukihiro Matsumoto)
2001/11/19
まつもと ゆきひろです
[ruby-dev:14975] Re: alias var and trace_var
From:
nobu.nakada@...
Date:
2001-10-22 07:35:04 UTC
List:
ruby-dev #14975
なかだです。
At Mon, 22 Oct 2001 14:49:02 +0900,
K.Kosako <kosako@sofnec.co.jp> wrote:
> <200110220417.NAA08543@zeus.sofnec.co.jp>から
> > ただ、global_variable構造体のメモリ開放漏れがあるようなので、
> > 中田さんの修正の上に、参照カウンタを追加してみました。
> > (これも1.47からの差分です。)
あぅ。すいません。途中ちらっとObjectにしちゃおうかと思ったん
ですが、入り切らないので止めにしてそのまま忘れてました。
> 未公認パッチではありますが、
> 修正量が多いのでChangeLogを付けておきます。
どうするのがいいのかな。
それと新しく変数を作るときにglobal_variableを割り当ててからす
ぐ解放するのも無駄なので、これでどうでしょうか。trace_varもとく
にremovedを立てずに即解放するようにしてみました。
[ruby-dev:14971]からの差分です。
--- variable.c~ Mon Oct 22 16:12:16 2001
+++ variable.c Mon Oct 22 16:17:41 2001
@@ -740,7 +740,11 @@ rb_alias_variable(name1, name2)
rb_raise(rb_eSecurityError, "Insecure: can't alias global variable");
- entry1 = rb_global_entry(name1);
entry2 = rb_global_entry(name2);
- if (entry1->var != entry2->var) {
+ if (!st_lookup(rb_global_tbl, name1, &entry1)) {
+ entry = ALLOC(struct global_entry);
+ st_add_direct(rb_global_tbl, name1, entry1);
+ entry->id = id;
+ }
+ else if (entry1->var != entry2->var) {
struct global_variable *var = entry1->var;
if (var->block_trace) {
@@ -751,13 +755,16 @@ rb_alias_variable(name1, name2)
struct trace_var *trace = var->trace;
while (trace) {
- trace->removed = 1;
- trace = trace->next;
+ struct trace_var *next = trace->next;
+ free(trace);
+ trace = next;
}
- remove_trace(var);
free(var);
}
- entry2->var->counter++;
- entry1->var = entry2->var;
}
+ else {
+ return;
+ }
+ entry2->var->counter++;
+ entry1->var = entry2->var;
}
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦