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