[#31166] is_ruby_native_thread() — Masahiro Sakai (酒井政裕) <masahiro.sakai@...>

酒井です。

16 messages 2007/07/08
[#31269] Re: is_ruby_native_thread() — Nobuyoshi Nakada <nobu@...> 2007/07/21

なかだです。

[#31270] Re: is_ruby_native_thread() — Hidetoshi NAGAI <nagai@...> 2007/07/22

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

[#31298] retryの使い方 — eklerni <eklerni@...>

松尾といいます。

52 messages 2007/07/25
[#31299] Re: retryの使い方 — SASADA Koichi <ko1@...> 2007/07/26

 ささだです。

[#31300] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/26

松尾です、返信ありがとうございます。

[#31303] Re: retryの使い方 — Yugui <yugui@...> 2007/07/26

Yuguiといいます。

[#31306] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/26

松尾といいます。

[#31308] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/07/26

In article <46A909DD.1070405@for.mail-box.ne.jp>,

[#31310] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/26

Tanaka Akira さんは書きました:

[#31314] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/07/30

In article <46A92530.80507@for.mail-box.ne.jp>,

[#31315] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/30

Tanaka Akira さんは書きました:

[#31316] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/07/30

In article <46AD7A16.8080509@for.mail-box.ne.jp>,

[#31317] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/31

松尾です。

[#31381] Re: retryの使い方 — SASADA Koichi <ko1@...> 2007/08/12

 ささだです。

[#31422] Re: retryの使い方 — Yukihiro Matsumoto <matz@...> 2007/08/15

まつもと ゆきひろです

[#31425] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/08/15

In article <E1ILDTi-0005T6-Be@x31>,

[#31426] Re: retryの使い方 — Yukihiro Matsumoto <matz@...> 2007/08/15

まつもと ゆきひろです

[#31433] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/08/16

In article <E1ILKn6-0003Nv-0f@x31>,

[#31435] Re: retryの使い方 — Yukihiro Matsumoto <matz@...> 2007/08/16

まつもと ゆきひろです

[#31447] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/08/16

In article <E1ILVN9-0006xJ-7I@x31>,

[#31450] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/08/17

In article <E1ILq4x-0002Bs-Lg@x31>,

[#31451] Re: retryの使い方 — Yukihiro Matsumoto <matz@...> 2007/08/17

まつもと ゆきひろです

[ruby-dev:31172] Re: 構造体オブジェクトのcloneメソッド呼び出しでメモリリーク発生

From: Nobuyoshi Nakada <nobu@...>
Date: 2007-07-10 01:48:51 UTC
List: ruby-dev #31172
なかだです。

At Mon, 9 Jul 2007 23:19:10 +0900,
Mitsuhiko OHKUBO wrote in [ruby-dev:31170]:
> > > 【回避策】
> > > 次の修正で現象が発生しないことを確認(ただし、適切ではない)。
> > 
> > 「適切ではない」というのは、Structのサイズが変わること自体がお
> > かしい、という意味でしょうか。それを許容するとすれば、正しい修
> > 正だと思いますが。
>     いいえ、そうではありません。
>     意図どおりに表現できてなくてすみません。本意は「『回避策の内
> 容が』適切ではない『かもしれない』」でした。

その後考えてみたのですが、Structのサイズは通常変更不可能なこと
から、エラーにすべきではないかという気がして来ました。


Index: stable/struct.c
===================================================================
--- stable/struct.c	(revision 12726)
+++ stable/struct.c	(working copy)
@@ -558,6 +558,7 @@ rb_struct_init_copy(copy, s)
 	rb_raise(rb_eTypeError, "wrong argument class");
     }
-    RSTRUCT(copy)->ptr = ALLOC_N(VALUE, RSTRUCT(s)->len);
-    RSTRUCT(copy)->len = RSTRUCT(s)->len;
+    if (RSTRUCT(copy)->len != RSTRUCT(s)->len) {
+	rb_raise(rb_eTypeError, "struct size mismatch");
+    }
     MEMCPY(RSTRUCT(copy)->ptr, RSTRUCT(s)->ptr, VALUE, RSTRUCT(copy)->len);
 
Index: trunk/struct.c
===================================================================
--- trunk/struct.c	(revision 12726)
+++ trunk/struct.c	(working copy)
@@ -516,11 +516,6 @@ rb_struct_init_copy(VALUE copy, VALUE s)
 	rb_raise(rb_eTypeError, "wrong argument class");
     }
-    if (0 < RSTRUCT_LEN(s) && RSTRUCT_LEN(s) <= RSTRUCT_EMBED_LEN_MAX) {
-        RBASIC(copy)->flags &= ~RSTRUCT_EMBED_LEN_MASK;
-        RBASIC(copy)->flags |= RSTRUCT_LEN(s) << RSTRUCT_EMBED_LEN_SHIFT;
-    }
-    else {
-	RSTRUCT(copy)->as.heap.ptr = ALLOC_N(VALUE, RSTRUCT_LEN(s));
-	RSTRUCT(copy)->as.heap.len = RSTRUCT_LEN(s);
+    if (RSTRUCT_LEN(copy) != RSTRUCT_LEN(s)) {
+	rb_raise(rb_eTypeError, "struct size mismatch");
     }
     MEMCPY(RSTRUCT_PTR(copy), RSTRUCT_PTR(s), VALUE, RSTRUCT_LEN(copy));


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

In This Thread