summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-05-22 08:30:58 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-05-22 08:30:58 +0000
commit717302e2c4de9b86bf53fe65173500a33586001c (patch)
tree058e1b7acff0187ab6c193278acfc86c2675c89c /gc.c
parentdf62bb4fc987317e209679ef60ea98b31ebae431 (diff)
* gc.c (run_final): use rb_thread_critical instead of DEFER_INTS.
[ruby-dev:20272] * marshal.c: try to make ArgumentError and TypeError consistent. [ruby-core:01068] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3853 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/gc.c b/gc.c
index 8fe85689fa..cc1e93bef8 100644
--- a/gc.c
+++ b/gc.c
@@ -1519,10 +1519,11 @@ run_final(obj)
VALUE obj;
{
long i;
- int status;
+ int status, critical_save;
VALUE args[2], table;
- DEFER_INTS;
+ critical_save = rb_thread_critical;
+ rb_thread_critical = Qtrue;
args[1] = rb_ary_new3(1, rb_obj_id(obj)); /* make obj into id */
for (i=0; i<RARRAY(finalizers)->len; i++) {
args[0] = RARRAY(finalizers)->ptr[i];
@@ -1534,7 +1535,7 @@ run_final(obj)
rb_protect((VALUE(*)_((VALUE)))run_single_final, (VALUE)args, &status);
}
}
- ENABLE_INTS;
+ rb_thread_critical = critical_save;
}
void