Forum: Ruby-core [ruby-trunk - Bug #8100][Open] Segfault in ruby-2.0.0p0

Posted by Magnus Holm (judofyr)
on 2013-03-15 12:58
(Received via mailing list)
Issue #8100 has been reported by judofyr (Magnus Holm).

----------------------------------------
Bug #8100: Segfault in ruby-2.0.0p0
https://bugs.ruby-lang.org/issues/8100

Author: judofyr (Magnus Holm)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
ruby -v: ruby 2.0.0p0 (2013-02-24 revision 39474) [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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by zzak (Zachary Scott) (Guest)
on 2013-03-18 02:52
(Received via mailing list)
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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by DAddYE (Davide D'Agostino) (Guest)
on 2013-03-18 08:14
(Received via mailing list)
Issue #8100 has been updated by DAddYE (Davide D'Agostino).

File seg.txt added

I got a similar one too, see here: 
https://github.com/padrino/padrino-framework/issues/1131


----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37688

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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by zzak (Zachary Scott) (Guest)
on 2013-03-18 17:12
(Received via mailing list)
Issue #8100 has been updated by zzak (Zachary Scott).


Forgot to add a link to the repo on github: 
https://github.com/zzak/segfault_spec.rb
----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37701

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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by Tom Wardrop (wardrop)
on 2013-03-19 07:05
(Received via mailing list)
Issue #8100 has been updated by wardrop (Tom Wardrop).


I'm also getting segfaults on Ruby 2.0.0. It seems to be related to 
threading or forking. Can't quite put my figure on it. All I can say is 
that I don't get in when running my web app in WEBrick on my Mac, but if 
running it on my CentOS server with Phusion Passenger using the smart 
spawn method, I get it all the time, about every 10th request it 
segfaults. Setting passenger to a conservative spawn method (one request 
per process) reduces the segfault rate considerably, but they still 
occur.

Here's a stack overflow thread about it, with a response I left on there 
with a bit more information about my experiences: 
http://stackoverflow.com/questions/15315809/segfau...

I also reported this to the Phusion Passenger Google Group before 
realising it's a problem with ruby 2.0.0: 
https://groups.google.com/forum/?fromgroups=#!topi...

Here's a log including numerous segfaults from my CentOS server running 
Phusion Passenger: https://gist.github.com/Wardrop/5179380

----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37721

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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by Magnus Holm (judofyr)
on 2013-03-22 10:38
(Received via mailing list)
Issue #8100 has been updated by judofyr (Magnus Holm).

File fail.rb added

I've managed to reduce the script down to 30 lines (with no 
dependencies) that segfaults in both 2.0.0-p0 and trunk (39875). It 
doesn't segfault every time though so if it takes more than a few 
seconds to run it, simply Ctrl-C and try again.
----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37813

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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by Magnus Holm (judofyr)
on 2013-03-22 11:01
(Received via mailing list)
Issue #8100 has been updated by judofyr (Magnus Holm).


Here's a backtrace I got in gdb: http://pastie.org/7064676. 
rb_gc_mark_unlinked_live_method_entries seems suspicious and related to 
what the script does.
----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37814

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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by Tom Wardrop (wardrop)
on 2013-03-22 11:16
(Received via mailing list)
Issue #8100 has been updated by wardrop (Tom Wardrop).


They've obviously done work on the garbage collector for Ruby 2.0. This 
is likely a bug introduced as result of that. Good work tracking it down 
judofyr.
----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37815

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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by Magnus Holm (judofyr)
on 2013-03-22 11:55
(Received via mailing list)
Issue #8100 has been updated by judofyr (Magnus Holm).


After working with charliesome we've now found an even simpler test 
case:

http://eval.in/13339

This *always* segfaults for me on trunk.
----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37816

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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by charliesome (Charlie Somerville) (Guest)
on 2013-03-22 12:22
(Received via mailing list)
Issue #8100 has been updated by charliesome (Charlie Somerville).


=begin
Magnus and I reduced this down to an even simpler^2 test case:

  loop do
    def x
      "hello" * 1000
    end

    method(:x).call
  end
=end
----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37819

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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by kosaki (Motohiro KOSAKI) (Guest)
on 2013-03-22 14:04
(Received via mailing list)
Issue #8100 has been updated by kosaki (Motohiro KOSAKI).

Category set to core
Status changed from Open to Assigned
Assignee set to authorNari (Narihiro Nakamura)


----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37823

Author: judofyr (Magnus Holm)
Status: Assigned
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]


=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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by Nobuyoshi Nakada (nobu)
on 2013-03-23 11:03
(Received via mailing list)
Issue #8100 has been updated by nobu (Nobuyoshi Nakada).

Status changed from Closed to Assigned
% Done changed from 100 to 0


----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37847

Author: judofyr (Magnus Holm)
Status: Assigned
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]


=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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by charliesome (Charlie Somerville) (Guest)
on 2013-03-23 11:17
(Received via mailing list)
Issue #8100 has been updated by charliesome (Charlie Somerville).


nobu-san, this will loop forever when the bug is fixed. Perhaps change 
it to 100_000.times?
----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37848

Author: judofyr (Magnus Holm)
Status: Assigned
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]


=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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by Tom Wardrop (wardrop)
on 2013-03-23 12:58
(Received via mailing list)
Issue #8100 has been updated by wardrop (Tom Wardrop).


I'd set it to a duration rather than a set number of iterations. I've 
see it go for 2 seconds on my machine before segfault'ing. 3 seconds 
should fail almost every time.

    start_time = Time.now
    while (Time.now - start_time) < 3
      def x
        "hello" * 1000
      end
      method(:x).call
    end

----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37851

Author: judofyr (Magnus Holm)
Status: Assigned
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]


=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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by Nobuyoshi Nakada (nobu)
on 2013-03-23 13:58
(Received via mailing list)
Issue #8100 has been updated by nobu (Nobuyoshi Nakada).


charliesome (Charlie Somerville) wrote:
> nobu-san, this will loop forever when the bug is fixed. Perhaps change it to 
100_000.times?

Sure, I've forgot it before the commit.
----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37854

Author: judofyr (Magnus Holm)
Status: Assigned
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]


=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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by naruse (Yui NARUSE) (Guest)
on 2013-03-23 20:53
(Received via mailing list)
Issue #8100 has been updated by naruse (Yui NARUSE).

Status changed from Closed to Assigned


----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37865

Author: judofyr (Magnus Holm)
Status: Assigned
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]


=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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by zzak (Zachary Scott) (Guest)
on 2013-03-24 21:25
(Received via mailing list)
Issue #8100 has been updated by zzak (Zachary Scott).


Thank you nari-san and everyone who helped with this.

Should this be backported as well?
----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37905

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]


=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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by authorNari (Narihiro Nakamura) (Guest)
on 2013-03-25 03:55
(Received via mailing list)
Issue #8100 has been updated by authorNari (Narihiro Nakamura).


zzak (Zachary Scott) wrote:
> Thank you nari-san and everyone who helped with this.
>
> Should this be backported as well?

Yeah, this fix should be backport to 1.9.3 and 2.0.0.
----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37910

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]


=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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by Tom Wardrop (wardrop)
on 2013-03-25 10:45
(Received via mailing list)
Issue #8100 has been updated by wardrop (Tom Wardrop).


Eagerly awaiting the backport. Can someone please leave a comment when 
it's back-ported to ruby-2.0.0 head?
----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37915

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]


=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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by authorNari (Narihiro Nakamura) (Guest)
on 2013-03-25 12:08
(Received via mailing list)
Issue #8100 has been updated by authorNari (Narihiro Nakamura).


wardrop (Tom Wardrop) wrote:
> Eagerly awaiting the backport. Can someone please leave a comment when it's 
back-ported to ruby-2.0.0 head?

The backport request ticket is here.
https://bugs.ruby-lang.org/issues/8163
You might want to watch this ticket for your purpose.
----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37918

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]


=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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by Tom Wardrop (wardrop)
on 2013-03-25 14:20
(Received via mailing list)
Issue #8100 has been updated by wardrop (Tom Wardrop).


Thanks for that. By the way, I've applied the patch to my production 
server. Write me down as another happy customer :-)
----------------------------------------
Bug #8100: Segfault in trunk
https://bugs.ruby-lang.org/issues/8100#change-37920

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]


=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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Posted by "morgoth (Wojciech Wnętrzak)" <w.wnetrzak@gmail.co (Guest)
on 2013-05-13 12:27
(Received via mailing list)
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/581230cbb3b3...

The code in question will do these steps in several threads at the same 
time:

* 
https://github.com/rtomayko/tilt/blob/581230cbb3b3...
* 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/581230cbb3b3...
* 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
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.