From: "naruse (Yui NARUSE)" <naruse@...> Date: 2013-03-22T19:58:48+09:00 Subject: [ruby-core:53637] [ruby-trunk - Bug #8144] test_segv_test(TestRubyOptions) test failure Issue #8144 has been updated by naruse (Yui NARUSE). I also experienced a similar failure on Linux i686 various distribution. http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/log/20130321T151200Z.diff.html.gz http://c5632.rubyci.org/~chkbuild/ruby-trunk/log/20130321T030302Z.diff.html.gz http://u32.rubyci.org/~chkbuild/ruby-trunk/log/20130319T230301Z.diff.html.gz On this debian squeeze it always happen, but on CentOS 5.8/Ubuntu 10.04 it is at random. My some inspection it seems because fprintf in rb_dump_backtrace_with_lines. It is called from signal handler and fprintf is async signal unsafe. This fprintf seems to break some memory value for example rb_cString. But I doubt this really caused by this... Anyway on debian squeeze, following patch fixed this. Could you try this? diff --git a/addr2line.c b/addr2line.c index c0fad49..fc12b97 100644 --- a/addr2line.c +++ b/addr2line.c @@ -617,21 +617,25 @@ rb_dump_backtrace_with_lines(int num_traces, void **trace, char **syms) /* fprintf may not be async-signal safe */ for (i = 0; i < num_traces; i++) { line_info_t *line = &lines[i]; + #define BUFLEN 256 + char buf[BUFLEN]; + int n; if (line->line > 0) { if (line->filename) { if (line->dirname && line->dirname[0]) { - fprintf(stderr, "%s %s/%s:%d\n", syms[i], line->dirname, line->filename, line->l + n = snprintf(buf, BUFLEN, "%s %s/%s:%d\n", syms[i], line->dirname, line->filenam } else { - fprintf(stderr, "%s %s:%d\n", syms[i], line->filename, line->line); + n = snprintf(buf, BUFLEN, "%s %s:%d\n", syms[i], line->filename, line->line); } } else { - fprintf(stderr, "%s ???:%d\n", syms[i], line->line); + n = snprintf(buf, BUFLEN, "%s ???:%d\n", syms[i], line->line); } } else { - fprintf(stderr, "%s\n", syms[i]); + n = snprintf(buf, BUFLEN, "%s\n", syms[i]); } + n = write(2, buf, n); } for (i = 0; i < num_traces; i++) { ---------------------------------------- Bug #8144: test_segv_test(TestRubyOptions) test failure https://bugs.ruby-lang.org/issues/8144#change-37817 Author: vo.x (Vit Ondruch) Status: Open Priority: Normal Assignee: Category: Target version: ruby -v: ruby -v: ruby 2.0.0p0 (2013-02-24) [i386-linux] =begin After doing several successful builds [1], next build crashed suddenly with: test_segv_test(TestRubyOptions) [/builddir/build/BUILD/ruby-2.0.0-p0/test/ruby/test_rubyoptions.rb:513]: Expected /#<Bogus:/ to match "-e:3: [BUG] Segmentation fault\nruby 2.0.0p0 (2013-02-24) [i386-linux]\n\n-- Control frame information -----------------------------------------------\nc:0003 p:---- s:0009 e:000008 CFUNC :kill\nc:0002 p:0041 s:0004 E:001ffc EVAL -e:3 [FINISH]\nc:0001 p:0000 s:0002 E:001d24 TOP [FINISH]\n\n-e:3:in `<main>'\n-e:3:in `kill'\n\n-- C level backtrace information -------------------------------------------\n/builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x175cc9) [0x519cc9] vm_dump.c:647\n/builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x54aef) [0x3f8aef] error.c:283\n/builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(rb_bug+0x41) [0x3f8f01] error.c:302\n/builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x10700d) [0x4ab00d] signal.c:649\n[0xd84410]\n[0xd84430]\n/lib/libc.so.6(kill+0x16) [0x8dcab6]\n/builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(rb_f_kill+0x66) [0x4abaa6] signal.c:424\n/builddir/build/BUILD/ruby-2.0.0-p0/ libruby.so.2.0.0(+0x15ad6f) [0x4fed6f] vm_insnhelper.c:1294\n/builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x15f7d9) [0x5037d9] vm_insnhelper.c:1438\n/builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x170eaf) [0x514eaf] vm_insnhelper.c:1528\n/builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x16365c) [0x50765c] insns.def:1017\n/builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x1691d4) [0x50d1d4] vm.c:1175\n/builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(rb_iseq_eval_main+0x8c) [0x50f11c] vm.c:1423\n/builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x57ccc) [0x3fbccc] eval.c:250\n/builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(ruby_exec_node+0x25) [0x3fd535] eval.c:315\n/builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(ruby_run_node+0x31) [0x3feff1] eval.c:307\n/builddir/build/BUILD/ruby-2.0.0-p0/ruby() [0x80486b9] main.c:36\n/lib/libc.so.6(__libc_start_main+0xf3) [0x8c7963]\n/builddir/build/BUILD/ruby-2.0.0-p0/ruby() [0x80486e1] main.c: 38\n\n-- Other runtime information -----------------------------------------------\n\n* Loaded script: -e\n\n* Loaded features:\n\n". In readable form: test_segv_test(TestRubyOptions) [/builddir/build/BUILD/ruby-2.0.0-p0/test/ruby/test_rubyoptions.rb:513]: Expected /#<Bogus:/ to match "-e:3: [BUG] Segmentation fault ruby 2.0.0p0 (2013-02-24) [i386-linux] -- Control frame information ----------------------------------------------- c:0003 p:---- s:0009 e:000008 CFUNC :kill c:0002 p:0041 s:0004 E:001ffc EVAL -e:3 [FINISH] c:0001 p:0000 s:0002 E:001d24 TOP [FINISH] -e:3:in `<main>' -e:3:in `kill' -- C level backtrace information ------------------------------------------- /builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x175cc9) [0x519cc9] vm_dump.c:647 /builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x54aef) [0x3f8aef] error.c:283 /builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(rb_bug+0x41) [0x3f8f01] error.c:302 /builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x10700d) [0x4ab00d] signal.c:649 [0xd84410] [0xd84430] /lib/libc.so.6(kill+0x16) [0x8dcab6] /builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(rb_f_kill+0x66) [0x4abaa6] signal.c:424 /builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x15ad6f) [0x4fed6f] vm_insnhelper.c:1294 /builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x15f7d9) [0x5037d9] vm_insnhelper.c:1438 /builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x170eaf) [0x514eaf] vm_insnhelper.c:1528 /builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x16365c) [0x50765c] insns.def:1017 /builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x1691d4) [0x50d1d4] vm.c:1175 /builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(rb_iseq_eval_main+0x8c) [0x50f11c] vm.c:1423 /builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(+0x57ccc) [0x3fbccc] eval.c:250 /builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(ruby_exec_node+0x25) [0x3fd535] eval.c:315 /builddir/build/BUILD/ruby-2.0.0-p0/libruby.so.2.0.0(ruby_run_node+0x31) [0x3feff1] eval.c:307 /builddir/build/BUILD/ruby-2.0.0-p0/ruby() [0x80486b9] main.c:36 /lib/libc.so.6(__libc_start_main+0xf3) [0x8c7963] /builddir/build/BUILD/ruby-2.0.0-p0/ruby() [0x80486e1] main.c:38 -- Other runtime information ----------------------------------------------- * Loaded script: -e * Loaded features: ". [1] https://bugs.ruby-lang.org/issues/7521#note-7 =end -- http://bugs.ruby-lang.org/