ruby-prof / ruby-prof

A ruby profiler. See https://ruby-prof.github.io for more information.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

segfault when running subsequent specs on 2.4.6 (but not 2.4.0)

ioquatix opened this issue · comments

Okay, this is a weird one.

I have a gem, async-rspec, which includes a shared context for wrapping a spec in a RubyProf::Profile. However, the subsequent spec dies in GC.start. When I pin ruby-prof to 0.18.0 it works fine.

Therefore, I'm assuming some change between 0.18.0 and 1.0.0 has caused some kind of inconsistency on 2.4.6. I also tried 2.4.5 (segfault) and 2.4.0 (no segfault).

Strangely enough, I could only reproduce the issue on Travis, not on my local computer.

Here is an example of tests passing: https://travis-ci.org/socketry/async-rspec/jobs/556720233
Here is an example of tests failing with segfault: https://travis-ci.org/socketry/async-rspec/jobs/556720274#L378

The only difference (confirmed by pinning gem versions) is ruby-prof 1.0.0 (failed) or 0.18.0 (segfault).

Not sure how I can help debug this further, but let me know if there is anything I can do to help. Honestly, this is a pretty weird issue, and it's made more complicated by the fact I cannot reproduce locally.

Can you narrow it down to the test that is causing the seg fault?

GC.start segfaults in the next spec, after running a profile in the previous one.

/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-files-1.0.2/lib/rspec/files/leaks.rb:25: [BUG] Segmentation fault at 0x0000000000000098
379ruby 2.4.6p354 (2019-04-01 revision 67394) [x86_64-linux]
380
381-- Control frame information -----------------------------------------------
382c:0041 p:---- s:0200 e:000199 CFUNC  :start
383c:0040 p:0018 s:0196 e:000195 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-files-1.0.2/lib/rspec/files/leaks.rb:25
384c:0039 p:0008 s:0189 e:000188 LAMBDA /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-files-1.0.2/lib/rspec/files/leaks.rb:38 [FINISH]
385c:0038 p:0011 s:0186 e:000185 BLOCK  /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb:317
386c:0037 p:0013 s:0183 e:000179 BLOCK  /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb:157 [FINISH]
387c:0036 p:---- s:0177 e:000176 CFUNC  :fetch
388c:0035 p:0014 s:0172 e:000171 BLOCK  /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb:157
389c:0034 p:0013 s:0169 e:000168 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-support-3.8.2/lib/rspec/support/reentrant_mutex.rb:
390c:0033 p:0011 s:0165 e:000164 BLOCK  /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb:156 [FINISH]
391c:0032 p:---- s:0162 e:000161 CFUNC  :fetch
392c:0031 p:0013 s:0157 e:000156 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb:155
393c:0030 p:0014 s:0152 e:000151 LAMBDA /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb:317 [FINISH]
394c:0029 p:0009 s:0149 e:000147 BLOCK  /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-files-1.0.2/lib/rspec/files/leaks.rb:45 [FINISH]
395c:0028 p:---- s:0145 e:000144 CFUNC  :tap
396c:0027 p:0020 s:0141 e:000140 BLOCK  /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-files-1.0.2/lib/rspec/files/leaks.rb:44 [FINISH]
397c:0026 p:---- s:0137 e:000136 CFUNC  :instance_exec
398c:0025 p:0017 s:0132 e:000131 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example.rb:450
399c:0024 p:0016 s:0126 e:000125 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/hooks.rb:373
400c:0023 p:0014 s:0120 e:000119 BLOCK  /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/hooks.rb:606 [FINISH]
401c:0022 p:0024 s:0117 e:000116 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example.rb:345
402c:0021 p:0069 s:0111 E:001a48 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/hooks.rb:607
403c:0020 p:0143 s:0104 E:000308 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/hooks.rb:464
404c:0019 p:0017 s:0097 E:000688 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example.rb:460
405c:0018 p:0032 s:0092 E:0020e8 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example.rb:503
406c:0017 p:0140 s:0087 E:000a98 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example.rb:254
407c:0016 p:0061 s:0080 e:000079 BLOCK  /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example_group.rb:633 [FINISH]
408c:0015 p:---- s:0074 e:000073 CFUNC  :map
409c:0014 p:0019 s:0070 e:000069 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example_group.rb:629
410c:0013 p:0087 s:0065 e:000064 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example_group.rb:595
411c:0012 p:0012 s:0056 e:000055 BLOCK  /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:116 [FINISH]
412c:0011 p:---- s:0052 e:000051 CFUNC  :map
413c:0010 p:0041 s:0048 e:000047 BLOCK  /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:116
414c:0009 p:0035 s:0045 e:000044 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/configuration.rb:2008
415c:0008 p:0011 s:0041 e:000040 BLOCK  /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:111
416c:0007 p:0018 s:0037 e:000036 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/reporter.rb:74
417c:0006 p:0028 s:0032 e:000031 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:110
418c:0005 p:0025 s:0025 e:000024 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:87
419c:0004 p:0085 s:0019 e:000018 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:71
420c:0003 p:0026 s:0011 e:000010 METHOD /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:45
421c:0002 p:0025 s:0006 e:000005 EVAL   /home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/exe/rspec:4 [FINISH]
422c:0001 p:0000 s:0003 E:000730 (none) [FINISH]
423
424-- Ruby level backtrace information ----------------------------------------
425/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/exe/rspec:4:in `<main>'
426/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:45:in `invoke'
427/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:71:in `run'
428/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:87:in `run'
429/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:110:in `run_specs'
430/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/reporter.rb:74:in `report'
431/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:111:in `block in run_specs'
432/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/configuration.rb:2008:in `with_suite_hooks'
433/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:116:in `block (2 levels) in run_specs'
434/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:116:in `map'
435/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/runner.rb:116:in `block (3 levels) in run_specs'
436/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example_group.rb:595:in `run'
437/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example_group.rb:629:in `run_examples'
438/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example_group.rb:629:in `map'
439/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example_group.rb:633:in `block in run_examples'
440/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example.rb:254:in `run'
441/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example.rb:503:in `with_around_and_singleton_context_hooks'
442/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example.rb:460:in `with_around_example_hooks'
443/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/hooks.rb:464:in `run'
444/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/hooks.rb:607:in `run_around_example_hooks_for'
445/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example.rb:345:in `call'
446/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/hooks.rb:606:in `block (2 levels) in run_around_example_hooks_for'
447/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/hooks.rb:373:in `execute_with'
448/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example.rb:450:in `instance_exec'
449/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/example.rb:450:in `instance_exec'
450/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-files-1.0.2/lib/rspec/files/leaks.rb:44:in `block (2 levels) in <module:Files>'
451/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-files-1.0.2/lib/rspec/files/leaks.rb:44:in `tap'
452/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-files-1.0.2/lib/rspec/files/leaks.rb:45:in `block (3 levels) in <module:Files>'
453/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb:317:in `block in let'
454/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb:155:in `fetch_or_store'
455/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb:155:in `fetch'
456/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb:156:in `block in fetch_or_store'
457/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-support-3.8.2/lib/rspec/support/reentrant_mutex.rb:23:in `synchronize'
458/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb:157:in `block (2 levels) in fetch_or_store'
459/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb:157:in `fetch'
460/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb:157:in `block (3 levels) in fetch_or_store'
461/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb:317:in `block (2 levels) in let'
462/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-files-1.0.2/lib/rspec/files/leaks.rb:38:in `block (2 levels) in <module:Files>'
463/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-files-1.0.2/lib/rspec/files/leaks.rb:25:in `current_ios'
464/home/travis/build/socketry/async-rspec/vendor/bundle/ruby/2.4.0/gems/rspec-files-1.0.2/lib/rspec/files/leaks.rb:25:in `start'
465
466-- Machine register context ------------------------------------------------
467 RIP: 0x00007fb655bd6d5f RBP: 0x0000000001347ae0 RSP: 0x00007ffe266472c0
468 RAX: 0x999999999999a560 RBX: 0x00000000008439e0 RCX: 0x0000000000000038
469 RDX: 0x0000000000000178 RDI: 0x0000000000000005 RSI: 0x0000000000000000
470  R8: 0x0000000000000098  R9: 0x0000000000000028 R10: 0x0000000001a9ba50
471 R11: 0x00007fb655bd8020 R12: 0xcccccccccccccccd R13: 0x0000000000000001
472 R14: 0x0000000002510de0 R15: 0x0000000000000001 EFL: 0x0000000000010202
473
474-- C level backtrace information -------------------------------------------
475/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(rb_vm_bugreport+0x4f3) [0x7fb655d31e33]
476/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(rb_bug_context+0xd4) [0x7fb655bba304]
477/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(sigsegv+0x3e) [0x7fb655ca89fe]
478[0x7fb6557834b0]
479/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(gc_mark_ptr+0x6f) [0x7fb655bd6d5f]
480[0x7fb6515981a2]
481/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(gc_marks_rest+0x121) [0x7fb655bdac21]
482/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(gc_start.part.67+0x51d) [0x7fb655bdb40d]
483/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(gc_start_internal+0x1bd) [0x7fb655bdcbad]
484/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7fb655d1591a]
485/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec_core+0x1558) [0x7fb655d1eb78]
486/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec+0x91) [0x7fb655d23cb1]
487/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_bmethod.isra.126+0x1a4) [0x7fb655d245d4]
488/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_iseq_block_from_c+0x175) [0x7fb655d24885]
489/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_block_from_c_unsplattable+0x1a0) [0x7fb655d24c50]
490/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_bmethod+0xb7) [0x7fb655d24fe7]
491/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_method+0xe3) [0x7fb655d257f3]
492/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec_core+0x16fa) [0x7fb655d1ed1a]
493/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec+0x91) [0x7fb655d23cb1]
494/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_iseq_block_from_c+0x37a) [0x7fb655d24a8a]
495/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(rb_yield+0xdd) [0x7fb655d2601d]
496/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(rb_hash_fetch_m+0xa8) [0x7fb655bdf648]
497/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7fb655d1591a]
498/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec_core+0x112a) [0x7fb655d1e74a]
499/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec+0x91) [0x7fb655d23cb1]
500/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_iseq_block_from_c+0x37a) [0x7fb655d24a8a]
501/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(rb_yield+0xdd) [0x7fb655d2601d]
502/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(rb_hash_fetch_m+0xa8) [0x7fb655bdf648]
503/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7fb655d1591a]
504/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec_core+0x112a) [0x7fb655d1e74a]
505/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec+0x91) [0x7fb655d23cb1]
506/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_bmethod.isra.126+0x1a4) [0x7fb655d245d4]
507/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_iseq_block_from_c+0x175) [0x7fb655d24885]
508/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_block_from_c_unsplattable+0x1a0) [0x7fb655d24c50]
509/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_bmethod+0xb7) [0x7fb655d24fe7]
510/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_method+0xe3) [0x7fb655d257f3]
511/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec_core+0x1558) [0x7fb655d1eb78]
512/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec+0x91) [0x7fb655d23cb1]
513/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_iseq_block_from_c+0x37a) [0x7fb655d24a8a]
514/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(rb_yield+0xdd) [0x7fb655d2601d]
515/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(rb_obj_tap+0x9) [0x7fb655c27319]
516/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7fb655d1591a]
517/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_method+0xe3) [0x7fb655d257f3]
518/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec_core+0x112a) [0x7fb655d1e74a]
519/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec+0x91) [0x7fb655d23cb1]
520/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_iseq_block_from_c+0x37a) [0x7fb655d24a8a]
521/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_block_from_c_splattable.constprop.140+0xd9) [0x7fb655d25e19]
522/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(yield_under+0x11d) [0x7fb655d262bd]
523/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7fb655d1591a]
524/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_method+0xe3) [0x7fb655d257f3]
525/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec_core+0x112a) [0x7fb655d1e74a]
526/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec+0x91) [0x7fb655d23cb1]
527/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_iseq_block_from_c+0x37a) [0x7fb655d24a8a]
528/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_block_from_c_unsplattable+0x1a0) [0x7fb655d24c50]
529/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_invoke_proc+0xd3) [0x7fb655d24e53]
530/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_opt_call+0xc3) [0x7fb655d25113]
531/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec_core+0x112a) [0x7fb655d1e74a]
532/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec+0x91) [0x7fb655d23cb1]
533/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_iseq_block_from_c+0x37a) [0x7fb655d24a8a]
534/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(rb_yield+0xdd) [0x7fb655d2601d]
535/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(rb_ary_collect+0x4d) [0x7fb655b4eabd]
536/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7fb655d1591a]
537/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec_core+0x112a) [0x7fb655d1e74a]
538/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec+0x91) [0x7fb655d23cb1]
539/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(invoke_iseq_block_from_c+0x37a) [0x7fb655d24a8a]
540/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(rb_yield+0xdd) [0x7fb655d2601d]
541/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(rb_ary_collect+0x4d) [0x7fb655b4eabd]
542/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_cfunc+0xea) [0x7fb655d1591a]
543/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_call_method+0xe3) [0x7fb655d257f3]
544/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec_core+0x112a) [0x7fb655d1e74a]
545/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(vm_exec+0x91) [0x7fb655d23cb1]
546/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(ruby_exec_internal+0xb0) [0x7fb655bc02b0]
547/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(ruby_exec_node+0x1d) [0x7fb655bc20ed]
548/home/travis/.rvm/rubies/ruby-2.4.6/bin/../lib/libruby.so.2.4(ruby_run_node+0x1e) [0x7fb655bc504e]
549/home/travis/.rvm/rubies/ruby-2.4.6/bin/ruby(main+0x4b) [0x40085b] main.c:36

Sorry for the late response on this. I did look at it and couldn't reproduce it locally either. I was however using a newer version or Ruby (2.6.*). I need to check an 2.4.5.

Have you double checked your C extension for dangling pointers or use after free issues? That what it looks like.

Yes you need to use the same version of ruby.

Ok, I installed ruby 2.4.6 and still can't duplicate. I don't doubt there is a bug (probably gc'ing a freed pointer), but hard to fix without something to reproduce. Do you see it on newer versions or Ruby (like 2.6.*)? It shouldn't make a difference, but curious.

I couldn’t reproduce locally but maybe try compiling with -Wall and all the flags for uninitialised variables then perhaps check that all frees are followed by nullifying the pointers especially for ruby structures.

I tried restarting the job to see if it still crashes.

Okay, it's still crashing... I wonder if we can get access to the box via ssh to run a debugger.

Okay, I got SSH acces to travis. It's very finicky to reproduce, but I got a core dump.

Here is the relevant backtrace:

* thread #1: tid = 0, 0x00007fcef90bb428 libc.so.6`gsignal + 56, name = 'ruby', stop reason = signal SIGABRT
  * frame #0: 0x00007fcef90bb428 libc.so.6`gsignal + 56
    frame #1: 0x00007fcef90bd02a libc.so.6`abort + 362
    frame #2: 0x00007fcef94f2311 libruby.so.2.4`rb_bug_context + 225
    frame #3: 0x00007fcef95e09fe libruby.so.2.4`sigsegv + 62
    frame #4: 0x00007fcef90bb4b0 libc.so.6`??? + 1
    frame #5: 0x00007fcef950ed5f libruby.so.2.4`gc_mark_ptr + 111
    frame #6: 0x00007fcef4eba1a2 ruby_prof.so`prof_thread_mark + 18
    frame #7: 0x00007fcef9512c21 libruby.so.2.4`gc_marks_rest + 289
    frame #8: 0x00007fcef951340d libruby.so.2.4`gc_start.part.67 + 1309
    frame #9: 0x00007fcef9514bad libruby.so.2.4`gc_start_internal + 445

i.e. prof_thread_mark is probably a good place to start looking. Let me see if I can get a source line.

Okay this was super tricky but I got some more information:

Process 15123 stopped
* thread #1: tid = 15123, 0x00007f19250f1c00 ruby_prof.so`prof_measurement_mark, name = 'ruby', stop reason = signal SIGSEGV: invalid address (fault address: 0x257c1)
    frame #0: 0x00007f19250f1c00 ruby_prof.so`prof_measurement_mark
ruby_prof.so`prof_measurement_mark:
->  0x7f19250f1c00 <+0>:  movq   0x20(%rdi), %rdi
    0x7f19250f1c04 <+4>:  cmpq   $0x8, %rdi
    0x7f19250f1c08 <+8>:  je     0x7f19250f1c10            ; <+16>
    0x7f19250f1c0a <+10>: jmp    0x7f19250effb0            ; ??? + 1456
(lldb) disassemble --frame
ruby_prof.so`prof_measurement_mark:
->  0x7f19250f1c00 <+0>:  movq   0x20(%rdi), %rdi
    0x7f19250f1c04 <+4>:  cmpq   $0x8, %rdi
    0x7f19250f1c08 <+8>:  je     0x7f19250f1c10            ; <+16>
    0x7f19250f1c0a <+10>: jmp    0x7f19250effb0            ; ??? + 1456
    0x7f19250f1c0f <+15>: nop    
    0x7f19250f1c10 <+16>: rep    
    0x7f19250f1c11 <+17>: retq   

So it's dying on the first line... let me check the contents of the registers.

(lldb) register read
General Purpose Registers:
       rax = 0x8fffe3ffc1e00000
       rbx = 0x0000000002f1e440
       rcx = 0x000000000000003b
       rdx = 0x00000000000000fb
       rdi = 0x00000000000257a1
       rsi = 0x0000000001385ad2
       rbp = 0x0000000001a8d990
       rsp = 0x00007fff2ad66a58
        r8 = 0x0000000002f0fde8
        r9 = 0x0000000000000018
       r10 = 0x00000000029c2e60
       r11 = 0x00007f19250f51f0  ruby_prof.so`mark_methods
       r12 = 0x0000000000000062
       r13 = 0x0000000001383dc0
       r14 = 0x0000000001383de8
       r15 = 0x0000000001383de8
       rip = 0x00007f19250f1c00  ruby_prof.so`prof_measurement_mark
    rflags = 0x0000000000010202
        cs = 0x0000000000000033
        fs = 0x0000000000000000
        gs = 0x0000000000000000
        ss = 0x000000000000002b
        ds = 0x0000000000000000
        es = 0x0000000000000000

%rdi looks like garbage, it's not aligned so it's not a pointer.

  * frame #0: 0x00007f19250f1c00 ruby_prof.so`prof_measurement_mark
    frame #1: 0x00007f19250f238d ruby_prof.so`prof_method_mark + 61
    frame #2: 0x00007f19250f51fc ruby_prof.so`mark_methods + 12
    frame #3: 0x00007f1929812c88 libruby.so.2.4`st_foreach + 120
    frame #4: 0x00007f1929739c21 libruby.so.2.4`gc_marks_rest + 289
    frame #5: 0x00007f192973a40d libruby.so.2.4`gc_start.part.67 + 1309
    frame #6: 0x00007f192973bbad libruby.so.2.4`gc_start_internal + 445

Can you let me know if you need more information?

Awesome work ioquatix. Can you see if latest changes to master resolves?

No longer seems to work on 2.3 and also still crashing on 2.4

Minimum ruby version for ruby-prof 1.0+ is 2.4 and higher, so 2.3 not working is as expected.
That does look like a different traceback on 2.4.
When you got those tracebacks above, were you sshing into the travis build machine? If so, can I get access to that machine or its it proprietary?

You can get access can you ping me on Twitter?

It seems fixed on master.

Sadly its not...I added test showing the issue, and the tests work locally but segfault when running on Travis. So still need to investigate more (just need to find some time).

Great, so fixed?

Hopefully.