From: "H.Yamamoto" Date: 2004-04-09T17:43:24+09:00 Subject: [ruby-dev:23363] memory leak ? in Dir.glob with block 山本です。 先ほど気づいたのですが、Dir.glob をブロックつきで呼び出した場合、ブロックから例外などが出ると メモリリークしている気がします。 dir.c 1500 行目で free(buf) とあるのですが、その前に dir.c 1493 行目で push_globs(ary, buf, flags); とあり、 static void push_globs(ary, s, flags) VALUE ary; const char *s; int flags; { rb_glob2(s, flags, push_pattern, ary); } で、rb_glob2(path, flags, func, arg) の 1365 行目で if (status) rb_jump_tag(status); としているので、大域脱出が起こると free(buf) が実行されずにリークする気がします。 GC で保護されるのは、VALUE だけですよね?(自信なし) # [ruby-dev:23361] は先ほどコミットしました。