From: "morgoth (Wojciech Wnętrzak)" Date: 2013-05-13T19:26:14+09:00 Subject: [ruby-core:54962] [ruby-trunk - Bug #8100] Segfault in trunk Issue #8100 has been updated by morgoth (Wojciech Wn��trzak). Might be related to https://bugs.ruby-lang.org/issues/8056 ---------------------------------------- Bug #8100: Segfault in trunk https://bugs.ruby-lang.org/issues/8100#change-39305 Author: judofyr (Magnus Holm) Status: Closed Priority: Normal Assignee: authorNari (Narihiro Nakamura) Category: core Target version: current: 2.1.0 ruby -v: ruby 2.1.0dev (2013-03-18 trunk 39805) [x86_64-linux] Backport: =begin Full backtrace (both VM, C and Ruby) is both attached and available at https://travis-ci.org/rtomayko/tilt/jobs/5479138 I haven't been able to reproduce it (and thus I can't create a reduced test case). This is the test that fails: https://github.com/rtomayko/tilt/blob/581230cbb3b314e88cf5ec9167a24ebb8acc7a93/test/tilt_compilesite_test.rb#L31 The code in question will do these steps in several threads at the same time: * https://github.com/rtomayko/tilt/blob/581230cbb3b314e88cf5ec9167a24ebb8acc7a93/lib/tilt/template.rb#L212 * Define a method called "_tilt_#{Thread.current.id.abs}" on Object * Grab the UnboundMethod * Undefine the method from Object * https://github.com/rtomayko/tilt/blob/581230cbb3b314e88cf5ec9167a24ebb8acc7a93/lib/tilt/template.rb#L144 * Then it binds the UnboundMethod to an object and calls it The method is doing some funky `class << self` to ensure that it gets evaluated under a proper constant scope). It's also caching the methods, so it won't always define a new method, but might re-use another UnboundMethod from a previous compilation (that might have happened on a different thread). I know it's not much to go after, but at least the backtrace seems to suggest that the error happend in rb_ary_fill in array.c. I've also had another report of segfault in Tilt + Ruby 2.0.0, but I don't have the full backtrace yet: https://github.com/rtomayko/tilt/issues/179. Might this be related? Let me know if you need more details. =end -- http://bugs.ruby-lang.org/