diff options
| author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-02-11 09:11:48 +0000 |
|---|---|---|
| committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-02-11 09:11:48 +0000 |
| commit | 9d517a703d71ab3bce6b68545788f663a087efc6 (patch) | |
| tree | 010e3788c20f328d432dcacd8f1db880f832b266 /gc.c | |
| parent | b053e88b150554d9a6d718ea1126a269eb57b1d2 (diff) | |
| download | ruby-9d517a703d71ab3bce6b68545788f663a087efc6.tar.gz ruby-9d517a703d71ab3bce6b68545788f663a087efc6.tar.xz ruby-9d517a703d71ab3bce6b68545788f663a087efc6.zip | |
* gc.c (define_final, undefine_final): shouldn't add/remove finalizer
of forzen objects.
* gc.c (undefine_final): should remove FL_FINALIZE flag.
[ruby-dev:37964] (also see [ruby-dev:37959])
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@22240 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
| -rw-r--r-- | gc.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -2261,9 +2261,11 @@ static VALUE undefine_final(VALUE os, VALUE obj) { rb_objspace_t *objspace = &rb_objspace; + if (OBJ_FROZEN(obj)) rb_error_frozen("object"); if (finalizer_table) { st_delete(finalizer_table, (st_data_t*)&obj, 0); } + FL_UNSET(obj, FL_FINALIZE); return obj; } @@ -2283,6 +2285,7 @@ define_final(int argc, VALUE *argv, VALUE os) VALUE obj, block, table; rb_scan_args(argc, argv, "11", &obj, &block); + if (OBJ_FROZEN(obj)) rb_error_frozen("object"); if (argc == 1) { block = rb_block_proc(); } |
