# GC Bug? Ruby 1.8.4 core dumps on a very small extension

**URL:** <https://www.ruby-forum.com/t/gc-bug-ruby-1-8-4-core-dumps-on-a-very-small-extension/54001>\
**Category:** Ruby\
**Created:** [February 19, 2006, 11:48pm UTC](https://www.ruby-forum.com/t/gc-bug-ruby-1-8-4-core-dumps-on-a-very-small-extension/54001 "2006-02-19T23:48:18Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Danie\_Roux](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/8c91f0/32.png) [@Danie\_Roux](https://www.ruby-forum.com/u/Danie_Roux)\
**Post date:** [February 19, 2006, 11:48pm UTC](https://www.ruby-forum.com/t/gc-bug-ruby-1-8-4-core-dumps-on-a-very-small-extension/54001/1 "2006-02-19T23:48:18Z")

</div>

Hi all,

Long (and tiring) story short:

I have an extension that is 40 lines\* in total, the C code and Ruby  
code that exercise it. It core dumps, while I repeatedly call a method  
that just returns Qtrue.

All it really does is:

rb\_iv\_set(self, “@v”, 100);

in initialize. If I change that 100 to 99, it doesn’t core dump.  
Change it back to 100, it core dumps within a few seconds.

Further, the while loop that executes it looks like this:

while true  
print ‘’  
b.buzz  
end

If I take out the print statement, it keeps on running. Put back the  
print statement, and it core dumps.

This is a self-compiled 1.8.4 on Ubuntu i386. A friend confirms that  
the same thing happens to him on Gentoo with 1.8.4.

I am attaching the code, hopefully its going to come through.

- It was around 600, and use to core dump every 8 hours or so.  
Snipping it down to these 40 lines was pure blind luck, and many 8  
hour turnaround iterations.

---

<div class="post-metadata">

**Author:** ![Danie\_Roux](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/8c91f0/32.png) [@Danie\_Roux](https://www.ruby-forum.com/u/Danie_Roux)\
**Post date:** [February 20, 2006, 12:06am UTC](https://www.ruby-forum.com/t/gc-bug-ruby-1-8-4-core-dumps-on-a-very-small-extension/54001/2 "2006-02-20T00:06:24Z")

</div>

On Mon, 2006-02-20 at 07:47 +0900, Danie Roux wrote:

> Hi all,
> 
> Long (and tiring) story short:
> 
> I have an extension that is 40 lines\* in total, the C code and Ruby  
> code that exercise it. It core dumps, while I repeatedly call a method  
> that just returns Qtrue.

Please try making this change:

— buzz-orig.c 2006-02-19 23:01:22.000000000 +0000  
+++ buzz.c 2006-02-19 23:01:56.000000000 +0000  
@@ -8,7 +8,7 @@

static VALUE initialize(VALUE self)  
{

- rb\_iv\_set(self, “@v”, 100);

- rb\_iv\_set(self, “@v”, INT2FIX(100));

---

<div class="post-metadata">

**Author:** ![Danie\_Roux](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/8c91f0/32.png) [@Danie\_Roux](https://www.ruby-forum.com/u/Danie_Roux)\
**Post date:** [February 21, 2006, 5:56pm UTC](https://www.ruby-forum.com/t/gc-bug-ruby-1-8-4-core-dumps-on-a-very-small-extension/54001/3 "2006-02-21T17:56:04Z")

</div>

On 2/20/06, Ross B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> - rb\_iv\_set(self, “@v”, 100);
> 
> - rb\_iv\_set(self, “@v”, INT2FIX(100));

Ross,

Thank you. Moral of the story: Explicitly cast any C value into a Ruby  
one.

It still strikes me odd that it would run a couple of hundred  
iterations before breaking, though.

---

<div class="post-metadata">

**Author:** ![Danie\_Roux](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/8c91f0/32.png) [@Danie\_Roux](https://www.ruby-forum.com/u/Danie_Roux)\
**Post date:** [February 21, 2006, 8:35pm UTC](https://www.ruby-forum.com/t/gc-bug-ruby-1-8-4-core-dumps-on-a-very-small-extension/54001/4 "2006-02-21T20:35:34Z")

</div>

Danie Roux wrote:

> > Please try making this change:  
> > –  
> > Danie Roux _shuffle_ Adore Unix [http://blog.acolyte.co.za](http://blog.acolyte.co.za)

Assuming you’re using a 32bit machine. 100 % 4 == 0, so Ruby thinks  
100 is a pointer to a Ruby object. (Dereferencing 100 causes the core  
dump.) 99 % 2 == 1, so 99 looks like a Fixnum to Ruby – but not 99,  
99\>\>1 I think.

It may take a couple hundred iterations before the GC runs.

-Charlie
