Charles Mills schrieb: > Peter Schrammel wrote: > It may help if you explain what your trying to do a bit more. OK: The ruby part just does one thing: extend the RFuse Class with some methods: getdir getattr Then it creates a RFuse object a calls main on it. main is in C: It registers the wrapper functions "rf_getdir", "rf_getattr" to fuse and calls the main function of fuse, so the ruby programm is sleeping and waiting. if somebody does a "ls /tmp/fuse" the fuse system calls the registered function rf_getdir with 3 args: path, handler, filler where path is the requested path handler is a hanlde used by filler filler is a function, that takes 3 args: handler,string,mode now rf_getdir should do the following: create an object of RFiller(set the filler fuction and the handler) and pass the path, and the Rfiller object to self.getdir (on the ruby side). self.getdir calls filler.push("filename",mode) and returns the RFiller object should be destroyed now and rf_getdir is done. The problem is: even if I don't call ruby's getdir method I have endless recursions. > > > the function below should be registered using rb_define_alloc_func() > and is typically called rfill_alloc() done that...thanks > > you don't need this, if your worried about rfiller_instance being GC'ed > make it volatile. how to do this? sorry my ruby extension programming is at newbie level :-) > > > not sure how the flow of control goes in your program but seems pretty > obvious you have infinite recursion going on right here. > ok: But if I do just this: static int rf_getdir(const char *path, fuse_dirh_t h, fuse_dirfil_t f) { VALUE rfiller_class; VALUE rfiller_instance; rfiller_class=rb_const_get(rb_cObject,rb_intern("RFiller")); rfiller_instance=rb_funcall(rfiller_class,rb_intern("new"),0); // no call to anything! return 0; } I still get the same error... :-( Commenting out the "rfiller_instance="... line everything is all right. To me it seems the GC wakes up one in a while does something ... strange. Or I run out of memory because the GC never wakes up. Peter