From: Steve Hart Date: 2003-04-24T21:08:48+09:00 Subject: Error in ruby extension hi, Question related to extending ruby I have a class derived from a swigged c++ class i.e. class MyClass < Gm:GMClass def initialize() super() end def construct() @node = Gm::GMNode.new("name") #just to test ObjectSpace.garbage_collect end end I create an instance of MyClass using rb_load_protect and then call the construct method using rb_funcall. The problem is that if I create the instance in one c++ thread and then call the construct method in another c++ thread I get the following error when gc is invoked Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 8194 (LWP 1036)] mark_locations_array (x=0x41845000, n=530508239) at gc.c:501 #1 0x08072c89 in rb_gc () at gc.c:1208 #2 0x08072d7b in rb_gc_start () at gc.c:1245 #3 0x0806ced3 in call_cfunc (func=0x8072d70 , recv=1090738928, len=0, argc=0, argv=0x0) at eval.c:4547 #4 0x08063019 in rb_call0 (klass=1090738868, recv=1090738928, id=9505, oid=0, argc=0, argv=0x0, body=0x41035a50, nosuper=1) at eval.c:4684 #5 0x080637a1 in rb_call (klass=1090738868, recv=1090738928, mid=9505, argc=0, argv=0x0, scope=0) at eval.c:4901 #6 0x0805f05b in rb_eval (self=1090733368, n=0x0) at eval.c:2816 #7 0x080632f8 in rb_call0 (klass=1090733588, recv=1090733368, id=10053, oid=0, argc=0, argv=0x418449e0, body=0x41034920, nosuper=0) at eval.c:4812 #8 0x080637a1 in rb_call (klass=1090733588, recv=1090733368, mid=10053, argc=1, argv=0x418449dc, scope=1) at eval.c:4901 #9 0x08063a73 in rb_funcall2 (recv=0, mid=10053, argc=1, argv=0x418449dc) at ruby.h:615 The problem dissapears if call both from the same thread. I do remember seeing something about ruby not being thread safe but can't now find where I saw this I'm using ruby 1.8.0 (2003-03-03) [i686-linux], swig 1.3.19 Any help much appreciated Cheers