# Finalizers

**URL:** <https://www.ruby-forum.com/t/finalizers/134571>\
**Category:** Development\
**Created:** [April 12, 2008, 6:11am UTC](https://www.ruby-forum.com/t/finalizers/134571 "2008-04-12T06:11:24Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [April 12, 2008, 6:11am UTC](https://www.ruby-forum.com/t/finalizers/134571/1 "2008-04-12T06:11:24Z")

</div>

e$B$J$+$@$G$9!#e(B

ObjectSpace::{add,remove,call}\_finalizere$B$Oe(Bdeprecatede$B$H7Y9p$,=P$ke(B  
e$B$h$&$K$J$C$F$+$i$b$&D9$$$3$H7P$A$^$9!#$=$m$=$m\>C$7$F$b$$$$$s$8$ce(B  
e$B$J$$$G$7$g$&$+!#e(B

# Index: gc.c

— gc.c (revision 15981)  
+++ gc.c (working copy)  
@@ -1861,55 +1861,4 @@ os\_each\_obj(int argc, VALUE \*argv, VALUE  
}

## -static VALUE finalizers;

-/\* deprecated

- \*/
- 

-static VALUE  
-add\_final(VALUE os, VALUE block)  
-{

- rb\_warn(“ObjectSpace::add\_finalizer is deprecated; use  
define\_finalizer”);
- if (!rb\_respond\_to(block, rb\_intern(“call”))) {
- rb\_raise(rb\_eArgError, “wrong type argument %s (should be callable)”,
- 

```
rb_obj_classname(block));

```

- }
- rb\_ary\_push(finalizers, block);
- return block;  
-}
- 

-/\*

- 
  - deprecated

- \*/  
-static VALUE  
-rm\_final(VALUE os, VALUE block)  
-{
- rb\_warn(“ObjectSpace::remove\_finalizer is deprecated; use  
undefine\_finalizer”);
- rb\_ary\_delete(finalizers, block);
- return block;  
-}
- 

-/\*

- 
  - deprecated

- \*/  
-static VALUE  
-finals(void)  
-{
- rb\_warn(“ObjectSpace::finalizers is deprecated”);
- return finalizers;  
-}
- 

-/\*

- 
  - deprecated

- \*/
- 

-static VALUE  
-call\_final(VALUE os, VALUE obj)  
-{

- rb\_warn(“ObjectSpace::call\_finalizer is deprecated; use  
define\_finalizer”);
- need\_call\_final = 1;
- FL\_SET(obj, FL\_FINALIZE);
- return obj;  
-}
- 

/\*

- call-seq:  
@@ -1999,12 +1948,5 @@ run\_final(VALUE obj)  
rb\_thread\_critical = Qtrue;  
args[1] = 0;

- if (RARRAY\_LEN(finalizers) \> 0) {

- args[1] = rb\_obj\_freeze(rb\_ary\_new3(1, objid));

- }  
args[2] = (VALUE)rb\_safe\_level();

- for (i=0; i\<RARRAY\_LEN(finalizers); i++) {

- args[0] = RARRAY\_PTR(finalizers)[i];

- rb\_protect(run\_single\_final, (VALUE)args, &status);

- }  
if (finalizer\_table && st\_delete(finalizer\_table, (st\_data\_t\*)&obj,  
&table)) {  
if (!args[1] && RARRAY\_LEN(table) \> 0) {  
@@ -2321,8 +2263,4 @@ Init\_GC(void)  
rb\_define\_module\_function(rb\_mObSpace, “each\_object”, os\_each\_obj,  
-1);  
rb\_define\_module\_function(rb\_mObSpace, “garbage\_collect”,  
rb\_gc\_start, 0);

- rb\_define\_module\_function(rb\_mObSpace, “add\_finalizer”, add\_final,  
1);

- rb\_define\_module\_function(rb\_mObSpace, “remove\_finalizer”,  
rm\_final, 1);

- rb\_define\_module\_function(rb\_mObSpace, “finalizers”, finals, 0);

- rb\_define\_module\_function(rb\_mObSpace, “call\_finalizer”,  
call\_final, 1);

- rb\_gc\_register\_address(&rb\_mObSpace);

- rb\_global\_variable(&finalizers);

- rb\_gc\_unregister\_address(&rb\_mObSpace);

- finalizers = rb\_ary\_new();

- source\_filenames = st\_init\_strtable();

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [April 12, 2008, 3:39pm UTC](https://www.ruby-forum.com/t/finalizers/134571/2 "2008-04-12T15:39:22Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:34349] finalizers”  
on Sat, 12 Apr 2008 13:11:00 +0900, Nobuyoshi N.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|ObjectSpace::{add,remove,call}\_finalizere$B$Oe(Bdeprecatede$B$H7Y9p$,=P$ke(B  
|e$B$h$&$K$J$C$F$+$i$b$&D9$$$3$H7P$A$^$9!#$=$m$=$m\>C$7$F$b$$$$$s$8$ce(B  
|e$B$J$$$G$7$g$&$+!#e(B

e$B$$$$$s$8$c$J$$$G$7$g$&$+!#e(B
