Manual Garbage Collection

Hi. I’m having a problem with a Ruby-Gnome2 application I’ve been
building. For some reason(which I haven’t identified but I suspect is
ruby-gnome problem) my program randomly segfaults. I fixed this by
disabling garbage collection(Maybe GC was cleaning up objects that were
still in use?) but of course now my application runs out of memory
relatively quickly. I know which parts of my non-gnome related code are
memory hogs, and I was wondering if there is a way to manually garbage
collect specific objects(and their dependencies hopefully)? Or,
alternatively, is their a way to only run garbage collection within a
certain scope?

I’d love a solution to this, as my current alternatives are either
running out of memory or random segfaults.

On 6/13/07, Conan [email protected] wrote:

Hi. I’m having a problem with a Ruby-Gnome2 application I’ve been
building. For some reason(which I haven’t identified but I suspect is
ruby-gnome problem) my program randomly segfaults. I fixed this by
disabling garbage collection(Maybe GC was cleaning up objects that were
still in use?)

Not very likely, the GC if anything tends not to free objects which
are still referenced rather than the other way around. Segfaults are
almost always caused by flawed extension code in C/C++ I think that
ruby-gnome2 might have a bit of that. .

I’ve not used or looked at Ruby-Gnome2 but I’d look to see if it was
using finalizers. It could be that the bug is being exposed by their
code which runs in a finalizer. Turning off GC would prevent this
code from running.

but of course now my application runs out of memory
relatively quickly. I know which parts of my non-gnome related code are
memory hogs, and I was wondering if there is a way to manually garbage
collect specific objects(and their dependencies hopefully)? Or,
alternatively, is their a way to only run garbage collection within a
certain scope?

I’m afraid not.

I’d love a solution to this, as my current alternatives are either
running out of memory or random segfaults.

Or tracking down what’s actually segfaulting. Perhaps there are some
ideas in this thread:
http://www.ruby-forum.com/topic/110106


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

You can GC.start to run it manually. If you can I’d recommend trying to
figure out what object is getting improperly GC’d and let the
Ruby-Gnome2
team know about this. I’ve seen this kind of thing happen when Ruby
tries to
send it’s own objects back into the underlying library. For me it was
Ruby
subclasses of C++ classes and dealing with setting listener objects.

Jason

Conan R. wrote:

Ok, I’ll see if I can find(and hey, maybe disable) ruby-gnome’s
finalizers that may be causing problems. Thanks for your help, at least
now I’ve got an idea of where to look.

If anyone is interested in knowing more, I’ve continued this thread in
Garbage Collection causes segfaults - Ruby-Gnome 2 - Ruby-Forum with code examples.

Ok, I’ll see if I can find(and hey, maybe disable) ruby-gnome’s
finalizers that may be causing problems. Thanks for your help, at least
now I’ve got an idea of where to look.