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.
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);
On 2/20/06, Ross B. [email protected] 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.
Danie Roux wrote:
Please try making this change:
–
Danie Roux shuffle Adore Unix 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