# Adding a finalizer to a ruby object

**URL:** <https://www.ruby-forum.com/t/adding-a-finalizer-to-a-ruby-object/181266>\
**Category:** IronRuby\
**Created:** [January 8, 2010, 3:24pm UTC](https://www.ruby-forum.com/t/adding-a-finalizer-to-a-ruby-object/181266 "2010-01-08T15:24:14Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![barby](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/c57346/32.png) [@barby](https://www.ruby-forum.com/u/barby)\
**Post date:** [January 8, 2010, 3:24pm UTC](https://www.ruby-forum.com/t/adding-a-finalizer-to-a-ruby-object/181266/1 "2010-01-08T15:24:14Z")

</div>

Hi

How do I add a finalizer to a ruby object?

I’ve tried using ObjectSpace and define\_finalizer.  
But the proc never got executed when I called  
ObjectSpace.garbage\_collect  
Calling System::GC.collect had the same outcome

and implementing a Finalize method doesn’t seem to have any effect  
either

class MyClass

def Finalize  
puts “in Finalize”  
end

def finalize  
puts “in lower finalize”  
end

end

MyClass.new  
System::GC.collect System::GC.max\_generation,  
System::GCCollectionMode.forced  
#ObjectSpace.garbage\_collect

## Thanks

Met vriendelijke groeten - Best regards - Salutations  
Ivan Porto C.  
Blog: [http://flanders.co.nz](http://flanders.co.nz)  
Google Wave: removed\_email\_address@domain.invalid  
Twitter: [http://twitter.com/casualjim](http://twitter.com/casualjim)  
Author of IronRuby in Action ([http://manning.com/carrero](http://manning.com/carrero))

---

<div class="post-metadata">

**Author:** ![barby](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/c57346/32.png) [@barby](https://www.ruby-forum.com/u/barby)\
**Post date:** [January 9, 2010, 7:30pm UTC](https://www.ruby-forum.com/t/adding-a-finalizer-to-a-ruby-object/181266/2 "2010-01-09T19:30:21Z")

</div>

Garbage collection in Ruby is kind of tricky.

---

<div class="post-metadata">

**Author:** ![barby](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/c57346/32.png) [@barby](https://www.ruby-forum.com/u/barby)\
**Post date:** [January 11, 2010, 6:12am UTC](https://www.ruby-forum.com/t/adding-a-finalizer-to-a-ruby-object/181266/3 "2010-01-11T06:12:25Z")

</div>

Ivan Porto carrero wrote:

> Hi
> 
> How do I add a finalizer to a ruby object?
> 
> I’ve tried using ObjectSpace and define\_finalizer.  
> But the proc never got executed when I called  
> ObjectSpace.garbage\_collect  
> Calling System::GC.collect had the same outcome
> 
> and implementing a Finalize method doesn’t seem to have any effect  
> either
> 
> class MyClass
> 
> def Finalize  
> puts “in Finalize”  
> end
> 
> def finalize  
> puts “in lower finalize”  
> end
> 
> end

What about using a proc, or block and running finalize after yield or  
proc.call?

-Sam

---

<div class="post-metadata">

**Author:** ![barby](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/c57346/32.png) [@barby](https://www.ruby-forum.com/u/barby)\
**Post date:** [January 11, 2010, 9:45am UTC](https://www.ruby-forum.com/t/adding-a-finalizer-to-a-ruby-object/181266/4 "2010-01-11T09:45:30Z")

</div>

Ivan, I’m not sure but I’ve asked the rest of the team and someone will  
get back to you shortly.

~Jimmy

On Jan 11, 2010, at 12:00 AM, “Ivan Porto C.”  
\<[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\> wrote:

I specifically wanted to find a counterpart for this C#

public class SomeClass {

private object \_unmanagedResource;

public SomeClass(object unmanagedResource){  
\_unmanagedResource = unmanagedResource;  
}

~SomeClass(){  
\_unmanagedResource.Cleanup();  
\_unmanagedResource = null;  
}  
}

I was writing about the dispose pattern and wanted to include a full  
counterpart implementation with a finalizer for unmanaged resources.

* * *

Met vriendelijke groeten - Best regards - Salutations  
Ivan Porto C.  
Blog: [http://flanders.co.nz](http://flanders.co.nz) [http://flanders.co.nz](http://flanders.co.nz)  
Twitter: [http://twitter.com/casualjim](http://twitter.com/casualjim) [http://twitter.com/casualjim](http://twitter.com/casualjim)  
Author of IronRuby in Action  
([http://manning.com/carrero](http://manning.com/carrero)[IronRuby in Action - Ivan Porto Carrero and Adam Burmister | Manning](http://manning.com/carrero))

On Mon, Jan 11, 2010 at 6:12 AM, Sam Clopton  
\<[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\>  
wrote:  
Ivan Porto carrero wrote:

> either
> 
> end

What about using a proc, or block and running finalize after yield or  
proc.call?

## -Sam

Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/) [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

* * *

Ironruby-core mailing list  
[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[http://rubyforge.org/mailman/listinfo/ironruby-core](http://rubyforge.org/mailman/listinfo/ironruby-core)[http://rubyforge.org/mailman/listinfo/ironruby-core](http://rubyforge.org/mailman/listinfo/ironruby-core)

* * *

Ironruby-core mailing list  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[http://rubyforge.org/mailman/listinfo/ironruby-core](http://rubyforge.org/mailman/listinfo/ironruby-core)

---

<div class="post-metadata">

**Author:** ![barby](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/c57346/32.png) [@barby](https://www.ruby-forum.com/u/barby)\
**Post date:** [January 11, 2010, 9:00am UTC](https://www.ruby-forum.com/t/adding-a-finalizer-to-a-ruby-object/181266/5 "2010-01-11T09:00:27Z")

</div>

I specifically wanted to find a counterpart for this C#

public class SomeClass {

private object \_unmanagedResource;

public SomeClass(object unmanagedResource){  
\_unmanagedResource = unmanagedResource;  
}

~SomeClass(){  
\_unmanagedResource.Cleanup();  
\_unmanagedResource = null;  
}  
}

I was writing about the dispose pattern and wanted to include a full  
counterpart implementation with a finalizer for unmanaged resources.

* * *

Met vriendelijke groeten - Best regards - Salutations  
Ivan Porto C.  
Blog: [http://flanders.co.nz](http://flanders.co.nz)  
Twitter: [http://twitter.com/casualjim](http://twitter.com/casualjim)  
Author of IronRuby in Action ([http://manning.com/carrero](http://manning.com/carrero))

---

<div class="post-metadata">

**Author:** ![barby](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/c57346/32.png) [@barby](https://www.ruby-forum.com/u/barby)\
**Post date:** [January 11, 2010, 10:15am UTC](https://www.ruby-forum.com/t/adding-a-finalizer-to-a-ruby-object/181266/6 "2010-01-11T10:15:21Z")

</div>

oh if that is the case can they also get back to me with overriding an  
indexer  
([http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=3392](http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=3392))?  
I think that would result in a complete chapter with regards to CLR  
interop.

## Thanks a lot 😃

Met vriendelijke groeten - Best regards - Salutations  
Ivan Porto C.  
Blog: [http://flanders.co.nz](http://flanders.co.nz)  
Twitter: [http://twitter.com/casualjim](http://twitter.com/casualjim)  
Author of IronRuby in Action ([IronRuby in Action - Ivan Porto Carrero and Adam Burmister | Manning](http://manning.com/carrero))

On Mon, Jan 11, 2010 at 9:44 AM, Jimmy S. \<

---

<div class="post-metadata">

**Author:** ![barby](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/c57346/32.png) [@barby](https://www.ruby-forum.com/u/barby)\
**Post date:** [January 11, 2010, 10:40pm UTC](https://www.ruby-forum.com/t/adding-a-finalizer-to-a-ruby-object/181266/7 "2010-01-11T22:40:01Z")

</div>

We donâ€™t support finalizers yet, but it shouldnâ€™t be too much work to  
make ObjectSpace#define\_finalizer work with Ruby objects. We might also  
consider providing some means to override CLR Finalize method.

Tomas

From: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)] On Behalf Of Jimmy  
Schementi  
Sent: Monday, January 11, 2010 12:45 AM  
To: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Subject: Re: [Ironruby-core] Adding a finalizer to a ruby object

Ivan, I’m not sure but I’ve asked the rest of the team and someone will  
get back to you shortly.

~Jimmy

On Jan 11, 2010, at 12:00 AM, “Ivan Porto C.”  
\<[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\> wrote:  
I specifically wanted to find a counterpart for this C#

public class SomeClass {

private object \_unmanagedResource;

public SomeClass(object unmanagedResource){  
\_unmanagedResource = unmanagedResource;  
}

~SomeClass(){  
\_unmanagedResource.Cleanup();  
\_unmanagedResource = null;  
}  
}

I was writing about the dispose pattern and wanted to include a full  
counterpart implementation with a finalizer for unmanaged resources.

* * *

Met vriendelijke groeten - Best regards - Salutations  
Ivan Porto C.  
Blog: [http://flanders.co.nz](http://flanders.co.nz)  
Twitter: [http://twitter.com/casualjim](http://twitter.com/casualjim)  
Author of IronRuby in Action ([IronRuby in Action - Ivan Porto Carrero and Adam Burmister | Manning](http://manning.com/carrero))

On Mon, Jan 11, 2010 at 6:12 AM, Sam Clopton  
\<[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\> wrote:  
Ivan Porto carrero wrote:

> either
> 
> end

What about using a proc, or block and running finalize after yield or  
proc.call?

## -Sam

Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

* * *

Ironruby-core mailing list  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[http://rubyforge.org/mailman/listinfo/ironruby-core](http://rubyforge.org/mailman/listinfo/ironruby-core)

* * *

Ironruby-core mailing list  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[http://rubyforge.org/mailman/listinfo/ironruby-core](http://rubyforge.org/mailman/listinfo/ironruby-core)
