Danie Roux wrote:
> 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));
>
> 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 *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