Ruby Extension Code in C, GC Question

I've read this article: http://fixnum.org/ruby_c.html

It explains how to write a ruby extension in C, and explains how to
make the GC work with the new types you've defined.

However, it leaves me with one question:

What happens if you create a new object inside the C code, and this
triggers a garbage collection?
When you create new objects in the C code, are they automatically
added to the 'current' scope, so that the GC sees them? If so, then
how does it know when to remove them from the scope, and if not, then
what would happen if a GC cycle was triggered during C code execution?

Thanks
PieSquared

Hi,

···

In message "Re: Ruby Extension Code in C, GC Question" on Mon, 3 Mar 2008 11:19:56 +0900, Pie Squared <PieSquared@gmail.com> writes:

What happens if you create a new object inside the C code, and this
triggers a garbage collection?
When you create new objects in the C code, are they automatically
added to the 'current' scope, so that the GC sees them? If so, then
how does it know when to remove them from the scope, and if not, then
what would happen if a GC cycle was triggered during C code execution?

The object will be marked by Ruby's conservative garbage collector,
which marks objects seemed to be referenced from system stack.

              matz.

Oh! I had missed/misunderstood "conservative" in descriptions of
Ruby's GC...

Well, thanks! (And sorry for asking that question when I _should've_
been able to figure it out myself. :slight_smile: )

···

On Mar 2, 9:54 pm, Yukihiro Matsumoto <m...@ruby-lang.org> wrote:

Hi,

In message "Re: Ruby Extension Code in C, GC Question" > on Mon, 3 Mar 2008 11:19:56 +0900, Pie Squared <PieSqua...@gmail.com> writes:

>What happens if you create a new object inside the C code, and this
>triggers a garbage collection?
>When you create new objects in the C code, are they automatically
>added to the 'current' scope, so that the GC sees them? If so, then
>how does it know when to remove them from the scope, and if not, then
>what would happen if a GC cycle was triggered during C code execution?

The object will be marked by Ruby's conservative garbage collector,
which marks objects seemed to be referenced from system stack.

Garbage collection (computer science) - Wikipedia.

                                                    matz\.