Bug #2127
Updated by ioquatix (Samuel Williams) almost 3 years ago
=begin Hi, I am using ruby 1.9.2dev (2009-09-14 trunk 24923) [i686-linux]. Both Fiber#resume and rb_fiber_resume() are causing a segfault when called from inside a very simple C extension (see below). Thanks for your consideration. ``` ############################################################### # ls ############################################################### extconf.rb main.c ############################################################### # cat extconf.rb ############################################################### require 'mkmf' have_library('ruby-static', 'ruby_init') || have_library('ruby', 'ruby_init') create_makefile('main') ############################################################### # cat main.c ############################################################### #include <stdio.h> #include <ruby.h> VALUE body(VALUE arg) { printf("Fiber: Inside fiber body"); fflush(stdout); return Qnil; } RUBY_GLOBAL_SETUP int main(int argc, char** argv) { ruby_sysinit(&argc, &argv); RUBY_INIT_STACK; ruby_init(); printf("Main: Creating Ruby fiber..."); fflush(stdout); VALUE fib = rb_fiber_new(body, Qnil); VALUE dump = rb_inspect(fib); rb_io_puts(1, &dump, rb_stdout); printf("Main: Going to resume fiber...\n"); fflush(stdout); rb_funcall(fib, rb_intern("resume"), 0); /* <== SEGFAULT */ printf("Main: Fiber resumed successfully.\n"); fflush(stdout); return ruby_cleanup(0); } ############################################################### # ruby -v extconf.rb ############################################################### ruby 1.9.2dev (2009-09-14 trunk 24923) [i686-linux] checking for ruby_init() in -lruby-static... yes creating Makefile ############################################################### # sed -i 's,-shared,,g' Makefile ; make ############################################################### gcc -I. -I/home/sun/app/ruby-1.9-git/include/ruby-1.9.1/i686-linux -I/home/sun/app/ruby-1.9-git/include/ruby-1.9.1/ruby/backward -I/home/sun/app/ruby-1.9-git/include/ruby-1.9.1 -I. -D_FILE_OFFSET_BITS=64 -fPIC -g -o main.o -c main.c gcc -o main.so main.o -L. -L/home/sun/app/ruby-1.9-git/lib -Wl,-R/home/sun/app/ruby-1.9-git/lib -L. -rdynamic -Wl,-export-dynamic -lruby-static -lpthread -lrt -ldl -lcrypt -lm -lc ############################################################### # ./main.so ############################################################### Main: Creating Ruby fiber...#<Fiber:0x8a5938c> Main: Going to resume fiber... [BUG] Segmentation fault ruby 1.9.2dev (2009-09-14 trunk 24923) [i686-linux] -- control frame ---------- c:0001 p:---- s:0001 b:-001 l:000000 d:000000 ------ --------------------------- fish: Job 1, “./main.so” terminated by signal SIGSEGV (Address boundary error) #################################################### # gdb main.so core #################################################### GNU gdb 6.8 [...] Core was generated by `./main.so'. Program terminated with signal 11, Segmentation fault. [New process 8635] [New process 8636] #0 0xb7c539be in uw_frame_state_for () from /usr/lib/libgcc_s.so.1 (gdb) bt full #0 0xb7c539be in uw_frame_state_for () from /usr/lib/libgcc_s.so.1 No symbol table info available. #1 0xb7c54011 in _Unwind_Backtrace () from /usr/lib/libgcc_s.so.1 No symbol table info available. #2 0xb7ddf405 in backtrace () from /lib/libc.so.6 No symbol table info available. #3 0x08141c33 in rb_vm_bugreport () at vm_dump.c:598 trace = {0x8141c33, 0x816fb60, 0x816fbba, 0x80e386e, 0xb7ee740c, 0x0 <repeats 1019 times>} n = -1209027184 syms = (char **) 0xb7d4630f i = -1209789088 #4 0x0816fb60 in report_bug (file=0x0, line=0, fmt=0x819a2e3 "Segmentation fault", args=0x8aa97d4 "\236é\031k") at error.c:215 buf = '\0' <repeats 8176 times>, "\230\227ª\bcè\023\b\2102£\b\230~¬\b" out = (FILE *) 0xb7e41560 len = 0 #5 0x0816fbba in rb_bug (fmt=0x819a2e3 "Segmentation fault") at error.c:232 args = 0x8aa97d4 "\236é\031k" #6 0x080e386e in sigsegv (sig=11, info=0x8aa980c, ctx=0x8aa988c) at signal.c:616 th = (rb_thread_t *) 0x8a33288 #7 <signal handler called> No symbol table info available. #8 0x6b19e99e in ?? () No symbol table info available. ``` =end