From da9117c9de204ae56e7ea7db9fd050eb3191d6ff Mon Sep 17 00:00:00 2001 From: knu Date: Sat, 3 Mar 2007 07:30:46 +0000 Subject: * env.h (SCOPE_CLONE): Introduce a new scope flag to prevent a local_tbl region from getting freed many times; submitted by Chikanaga Tomoyuki in [ruby-dev:30460]. * eval.c (proc_invoke): Ditto. * gc.c (obj_free): Ditto. * parse.y (top_local_setup_gen): Ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_6@11965 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- gc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gc.c') diff --git a/gc.c b/gc.c index e3b088efd1..9ac3bfbf6f 100644 --- a/gc.c +++ b/gc.c @@ -1253,7 +1253,7 @@ obj_free(obj) if (RANY(obj)->as.scope.local_vars && RANY(obj)->as.scope.flags != SCOPE_ALLOCA) { VALUE *vars = RANY(obj)->as.scope.local_vars-1; - if (vars[0] == 0) + if (!(RANY(obj)->as.scope.flags & SCOPE_CLONE) && vars[0] == 0) RUBY_CRITICAL(free(RANY(obj)->as.scope.local_tbl)); if (RANY(obj)->as.scope.flags & SCOPE_MALLOC) RUBY_CRITICAL(free(vars)); -- cgit v1.2.3