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/