Issue #13605 has been updated by robertgleeson (Robert Gleeson).


wanabe (_ wanabe) wrote:
> I guess the code snippet is from pry. https://github.com/pry/pry/blob/c18601d6a4ff97d1b6599ccd9ffc8c63b8d8fccb/lib/pry/input_completer.rb#L172
> 
> Here are Dockerfile and patch for pry to reproduce the issue.
> 33 / 100 are aborted on my environment.

Thanks wanabe.

shyouhei (Shyouhei Urabe) wrote:
> What is `to_ignore` and `candidates` in your script?  Is it possible for you to show us a step to reproduce your situation?

Hey Shyouhei,

The segfault happens while running the pry test suite, I guess you can try:

git clone https://github.com/pry/pry.git
cd pry
git checkout -t origin/respond_to-2.4-warnings
bundle
bundle exec rake

On Linux/Travis it happens all the time, on OSX it happens randomly but this script always reproduces the issue for me, usually on 3rd or 4th attempt:

begin
  system "bundle exec rake"
end while $?.exitstatus == 0

I tried a workaround, by moving .collect(&:to_s) underneath candidates.sort!(..) but the bug just happens somewhere else then:

/Users/robert/pry/lib/pry/slop/option.rb:92: [BUG] rb_gc_mark(): 0x007f85ab35dc10 is T_NONE
ruby 2.4.1p111 
c:0053 p:---- s:0277 e:000276 CFUNC  :to_s
c:0052 p:0016 s:0273 e:000272 METHOD /Users/r/pry/lib/pry/slop/option.rb:92

A very similar segfault happens on ruby-head, here's the build log:
https://travis-ci.org/pry/pry/jobs/239070625

So I think it's an issue since 2.4 and on ruby HEAD as well.




----------------------------------------
Bug #13605: GC bug calling `ObjectSpace.each_object`
https://bugs.ruby-lang.org/issues/13605#change-65264

* Author: ryanf (Ryan Fitzgerald)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
This code made Ruby bail out with the message "[BUG] rb_gc_mark(): 0x000000040dc740 is T_NONE":

~~~ ruby
ObjectSpace.each_object(Module){|m|
  next if (to_ignore.include?(m) rescue true)

  if m.respond_to?(:instance_methods)
    candidates.concat m.instance_methods(false).collect(&:to_s)
  end
}
~~~

I haven't been able to repro, but it happened building Pry on Travis CI: https://travis-ci.org/pry/pry/jobs/236720971

The relevant logs are attached.

---Files--------------------------------
each_object_bug.txt (81.9 KB)
patch-for-2508d68e.patch (8.07 KB)
Dockerfile (353 Bytes)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>