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.
funny_fail.tar.gz (540 Bytes)
···
--
Danie Roux *shuffle* Adore Unix http://blog.acolyte.co.za
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));
return self;
}
···
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.
--
Ross Bamford - rosco@roscopeco.REMOVE.co.uk
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.
···
On 2/20/06, Ross Bamford <rossrt@roscopeco.co.uk> wrote:
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:
- rb_iv_set(self, "@v", 100);
+ rb_iv_set(self, "@v", INT2FIX(100));
--
Danie Roux *shuffle* Adore Unix http://blog.acolyte.co.za