ruby-changes:6224
From: nobu <ko1@a...>
Date: Mon, 30 Jun 2008 22:13:06 +0900 (JST)
Subject: [ruby-changes:6224] Ruby:r17737 (trunk): * gc.c (chain_finalized_object): should not delete from finalizer
nobu 2008-06-30 22:12:49 +0900 (Mon, 30 Jun 2008) New Revision: 17737 Modified files: trunk/ChangeLog trunk/gc.c Log: * gc.c (chain_finalized_object): should not delete from finalizer table until run. * gc.c (rb_gc_call_finalizer_at_exit): deferred_final_list may be empty first. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=17737 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=17737&r2=17736&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/gc.c?r1=17737&r2=17736&diff_format=u Index: ChangeLog =================================================================== --- ChangeLog (revision 17736) +++ ChangeLog (revision 17737) @@ -1,3 +1,11 @@ +Mon Jun 30 22:12:46 2008 Nobuyoshi Nakada <nobu@r...> + + * gc.c (chain_finalized_object): should not delete from finalizer + table until run. + + * gc.c (rb_gc_call_finalizer_at_exit): deferred_final_list may be + empty first. + Mon Jun 30 18:57:05 2008 Nobuyoshi Nakada <nobu@r...> * gc.c (gc_finalize_deferred): allow object allocation in finalizers. Index: gc.c =================================================================== --- gc.c (revision 17736) +++ gc.c (revision 17737) @@ -2041,7 +2041,7 @@ p->as.free.next = *final_list; *final_list = p; } - return ST_DELETE; + return ST_CONTINUE; } void @@ -2053,12 +2053,13 @@ /* run finalizers */ if (need_call_final) { - while ((p = deferred_final_list) != 0) { + do { + p = deferred_final_list; deferred_final_list = 0; finalize_list(objspace, p); st_foreach(finalizer_table, chain_finalized_object, (st_data_t)&deferred_final_list); - } + } while (deferred_final_list); } /* finalizers are part of garbage collection */ during_gc++; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/