ruby-changes:6876
From: nobu <ko1@a...>
Date: Wed, 6 Aug 2008 21:26:02 +0900 (JST)
Subject: [ruby-changes:6876] Ruby:r18394 (ruby_1_8, trunk): * gc.c (chain_finalized_object): deletes finalizers to be invoked from
nobu 2008-08-06 21:25:47 +0900 (Wed, 06 Aug 2008) New Revision: 18394 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18394 Log: * gc.c (chain_finalized_object): deletes finalizers to be invoked from finalizer_table. * gc.c (rb_gc_call_finalizer_at_exit): warns when could not invoke finalizers. Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/gc.c trunk/ChangeLog trunk/gc.c Index: ChangeLog =================================================================== --- ChangeLog (revision 18393) +++ ChangeLog (revision 18394) @@ -1,3 +1,11 @@ +Wed Aug 6 21:25:45 2008 Nobuyoshi Nakada <nobu@r...> + + * gc.c (chain_finalized_object): deletes finalizers to be invoked from + finalizer_table. + + * gc.c (rb_gc_call_finalizer_at_exit): warns when could not invoke + finalizers. + Wed Aug 6 20:56:43 2008 Tanaka Akira <akr@f...> * enc/depend: transcode table generation depends on Index: gc.c =================================================================== --- gc.c (revision 18393) +++ gc.c (revision 18394) @@ -2092,6 +2092,7 @@ } p->as.free.next = *final_list; *final_list = p; + return ST_DELETE; } return ST_CONTINUE; } @@ -2113,6 +2114,12 @@ st_foreach(finalizer_table, chain_finalized_object, (st_data_t)&deferred_final_list); } while (deferred_final_list); + if (finalizer_table->num_entries) { + rb_warning("%d finalizer%s left not-invoked due to self-reference", + finalizer_table->num_entries, + finalizer_table->num_entries > 1 ? "s" : ""); + } + st_free_table(finalizer_table); } /* finalizers are part of garbage collection */ during_gc++; Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 18393) +++ ruby_1_8/ChangeLog (revision 18394) @@ -1,3 +1,11 @@ +Wed Aug 6 21:25:45 2008 Nobuyoshi Nakada <nobu@r...> + + * gc.c (chain_finalized_object): deletes finalizers to be invoked from + finalizer_table. + + * gc.c (rb_gc_call_finalizer_at_exit): warns when could not invoke + finalizers. + Wed Aug 6 20:52:09 2008 Nobuyoshi Nakada <nobu@r...> * gc.c (gc_sweep, obj_free, run_final): defer finalizers of IO and Index: ruby_1_8/gc.c =================================================================== --- ruby_1_8/gc.c (revision 18393) +++ ruby_1_8/gc.c (revision 18394) @@ -1962,6 +1962,7 @@ } p->as.free.next = *final_list; *final_list = p; + return ST_DELETE; } return ST_CONTINUE; } @@ -1982,6 +1983,12 @@ st_foreach(finalizer_table, chain_finalized_object, (st_data_t)&deferred_final_list); } while (deferred_final_list); + if (finalizer_table->num_entries) { + rb_warning("%d finalizer%s left not-invoked due to self-reference", + finalizer_table->num_entries, + finalizer_table->num_entries > 1 ? "s" : ""); + } + st_free_table(finalizer_table); } /* run data object's finalizers */ for (i = 0; i < heaps_used; i++) { -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/