From: Suraj Kurapati Date: 2009-10-24T16:38:01+09:00 Subject: [ruby-core:26270] [Bug #2258] Kernel#require inside rb_require() inside rb_protect() inside SysV context fails Issue #2258 has been updated by Suraj Kurapati. Hi, I debugged the segfault during Kernel#require inside rb_require() inside rb_protect() inside a SysV context, and found that the culprit is gc_mark_locations(). It is processing (and corrupting) a small portion of the SysV context's stack space, regardless of whether the stack space is statically or dynamically allocated, as shown in the GDB output below. Notice that the "start" argument for gc_mark_locations() is within ruby_context.uc_ss_sp and ss_sp + ss_size. To solve this problem, I will try to add a function in Ruby's C API that tells Ruby the boundaries of its stack. This is strangely reminiscent of my feature request #2126. I suppose my experiments and discoveries so far provide make a case for exposing stack functions in the Ruby C API. Thanks for your consideration. ############################################################### # Statically allocated SysV context stack ############################################################### (gdb) p ruby_context.uc_stack $19 = {ss_sp = 0x82032a0, ss_flags = 0, ss_size = 4194304} (gdb) p /x ruby_context.uc_stack.ss_sp + ruby_context.uc_stack.ss_size $18 = 0x86032a0 (gdb) f #1 0x08071bf8 in gc_mark_locations (objspace=0x86114f0, start=0x8601680, end=0xbffff1f0) at gc.c:1328 ############################################################### # Dynamically allocated SysV context stack ############################################################### (gdb) p ruby_context.uc_stack $15 = {ss_sp = 0xb79f6008, ss_flags = 0, ss_size = 4194304} (gdb) p /x ruby_context.uc_stack.ss_sp + ruby_context.uc_stack.ss_size $16 = 0xb7df6008 (gdb) f #1 0x08071c00 in gc_mark_locations (objspace=0x82114f0, start=0xb7df4430, end=0xbffff1f0) at gc.c:1328 ---------------------------------------- http://redmine.ruby-lang.org/issues/show/2258 ---------------------------------------- http://redmine.ruby-lang.org