Issue #8100 has been updated by zzak (Zachary Scott).

File segfault_spec.tar.gz added
Subject changed from Segfault in ruby-2.0.0p0 to Segfault in trunk
Target version set to current: 2.1.0
ruby -v changed from ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux] to ruby 2.1.0dev (2013-03-18 trunk 39805) [x86_64-linux]

I've updated the description of this ticket, because I'm able to reproduce a similar bug. Only similar in that we're using a lot of the same dependencies.

I also went ahead and created (as small as possible) reproducible script. Here's the instructions for reproducing the segfault:

1) git clone git://github.com/zzak/segfault_spec.rb.git
2) bundle install
3) bundle exec rspec segfault_spec.rb
4) repeat #3 until segfault. this may take a few tries

I will also attach an archive of the script.
----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37684

Author: judofyr (Magnus Holm)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: current: 2.1.0
ruby -v: ruby 2.1.0dev (2013-03-18 trunk 39805) [x86_64-linux]


=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/