From: shyouhei@... Date: 2017-03-13T08:59:53+00:00 Subject: [ruby-core:80121] [Ruby trunk Bug#13305][Assigned] Occasional segfaults after defining methods while running coverage Issue #13305 has been updated by Shyouhei Urabe. Status changed from Open to Assigned Assignee set to Yusuke Endoh ---------------------------------------- Bug #13305: Occasional segfaults after defining methods while running coverage https://bugs.ruby-lang.org/issues/13305#change-63547 * Author: Nikita Shilnikov * Status: Assigned * Priority: Normal * Assignee: Yusuke Endoh * Target version: * ruby -v: ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16], ruby 2.5.0dev (2017-03-13 trunk 57944) [x86_64-darwin16] * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- The problem occurs on MRI 2.4.0 and the latest trunk only (2017-03-13 trunk 57944). After running `Coverage.start` code defines the same method few times but every time the size of the method increases. Occasionally MRI can fail on attempt to get the coverage result. The bug can be reproduced quite easily with the following two files a.rb ```ruby require 'coverage' Coverage.start require_relative './b' add_method(Class.new) Coverage.result ``` b.rb ```ruby REPEATS = 400 def add_method(target) REPEATS.times do target.class_eval(<<~RUBY, __FILE__, __LINE__ + 1) def foo #{"\n" * rand(REPEATS)} end 1 RUBY end end ``` Run `ruby a.rb` to reproduce the bug. Several runs may be required before MRI fails, but for me it fails on almost every run. Note that passing filename and line number to `class_eval` is important, so as adding `1` after the method definition. The crash report attached to the issue. ---Files-------------------------------- ruby_2017-03-12-223015_MacBook-Pro-Nikita-2.crash (12.2 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: