On Sun, Dec 14, 2003 at 12:02:27AM +0900, Elias Athanasopoulos wrote: > On Sat, Dec 13, 2003 at 10:11:12PM +0900, Yukihiro Matsumoto wrote: > > Hi, > > > > In message "strange rb_gc_mark error" > > on 03/12/13, Elias Athanasopoulos <elathan / phys.uoa.gr> writes: > > > > |I have a pure C function, which may be called arbitrary > > |sequential times. If I call any rb_* function inside, including > > |the simple rb_warn(), I get: > > | > > |BUG] rb_gc_mark(): unknown data type 0x28(0x89965b0) non object > > |ruby 1.8.0 (2003-08-04) [i586-linux] > > | > > |The error occures after a lot of calls; it reminds me the > > |behaviour of a stack overflow, or something. > > > > Show us whole program, if possible, to reproduce your error. > > I will try, but it is a little bit hard because the C func is called > from a C++ method deeply inside a complex inheritance tree. > > Things that I can verify now are: > > (a) The C func is called with no problem 8000 times. > (b) The C func is called for 3000+ and segfaults if I put a > simple rb_warn() inside. Ruby 1.8.0 > (c) The C func is called for 6000+ and segfaults if I put a > simple rb_warn() inside. Ruby 1.8.1 preview 3. Okay, it is my fault. :-( While writting a C++ extension for Ruby, I do (almost everywhere): static VALUE foo_init (...) { Foo *f = new Foo(); rb_iv_set (self, "__ptr__", (VALUE) f); return self; } static VALUE foo_bar (...) { Foo *f = (Foo *) rb_iv_get (self, "__ptr__"); f->Bar(); return self; } The error ruby reports is on an address of a Foo created pointer. If I remove the rb_iv_set() call, ruby executes correctly. But, I have to keep the pointer somewhere in order to execute methods of the specific class. Any ideas? Regards, -- University of Athens I bet the human brain Physics Department is a kludge --Marvin Minsky