diff options
| author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-30 13:12:49 +0000 |
|---|---|---|
| committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-30 13:12:49 +0000 |
| commit | a7c16d680311e5c14488b2714b42192f007cdde2 (patch) | |
| tree | 47e785bb1b422320c29e072cf51a87a5b620c5e1 | |
| parent | 848456630c01e911559e8294f841cff2b9a74bad (diff) | |
| download | ruby-a7c16d680311e5c14488b2714b42192f007cdde2.tar.gz ruby-a7c16d680311e5c14488b2714b42192f007cdde2.tar.xz ruby-a7c16d680311e5c14488b2714b42192f007cdde2.zip | |
* 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.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@17737 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ChangeLog | 8 | ||||
| -rw-r--r-- | gc.c | 7 |
2 files changed, 12 insertions, 3 deletions
@@ -1,3 +1,11 @@ +Mon Jun 30 22:12:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * 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@ruby-lang.org> * gc.c (gc_finalize_deferred): allow object allocation in finalizers. @@ -2041,7 +2041,7 @@ chain_finalized_object(st_data_t key, st_data_t val, st_data_t arg) p->as.free.next = *final_list; *final_list = p; } - return ST_DELETE; + return ST_CONTINUE; } void @@ -2053,12 +2053,13 @@ rb_gc_call_finalizer_at_exit(void) /* 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++; |
