Backport #4945
closedSegfault on Fiber#resume on Mac OS X 10.6.8
Description
=begin
When calling resume such as:
f = Fiber.new { puts "foo" }
f.resume
I'm getting the following segfault:
(irb):2: [BUG] Segmentation fault
ruby 1.9.2p274 (2011-06-06) [x86_64-darwin10.8.0]
-- control frame ----------
c:0024 p:---- s:0085 b:0085 l:000084 d:000084 CFUNC :resume
c:0023 p:0011 s:0082 b:0082 l:001938 d:000081 EVAL (irb):2
c:0022 p:---- s:0080 b:0080 l:000079 d:000079 FINISH
c:0021 p:---- s:0078 b:0078 l:000077 d:000077 CFUNC :eval
c:0020 p:0028 s:0071 b:0071 l:000070 d:000070 METHOD /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb/workspace.rb:80
c:0019 p:0033 s:0064 b:0063 l:000062 d:000062 METHOD /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb/context.rb:254
c:0018 p:0031 s:0058 b:0058 l:000878 d:000057 BLOCK /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb.rb:159
c:0017 p:0042 s:0050 b:0050 l:000049 d:000049 METHOD /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb.rb:273
c:0016 p:0011 s:0045 b:0045 l:000878 d:000044 BLOCK /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb.rb:156
c:0015 p:0144 s:0041 b:0041 l:000024 d:000040 BLOCK /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb/ruby-lex.rb:243
c:0014 p:---- s:0038 b:0038 l:000037 d:000037 FINISH
c:0013 p:---- s:0036 b:0036 l:000035 d:000035 CFUNC :loop
c:0012 p:0009 s:0033 b:0033 l:000024 d:000032 BLOCK /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb/ruby-lex.rb:229
c:0011 p:---- s:0031 b:0031 l:000030 d:000030 FINISH
c:0010 p:---- s:0029 b:0029 l:000028 d:000028 CFUNC :catch
c:0009 p:0023 s:0025 b:0025 l:000024 d:000024 METHOD /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb/ruby-lex.rb:228
c:0008 p:0046 s:0022 b:0022 l:000878 d:000878 METHOD /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb.rb:155
c:0007 p:0011 s:0019 b:0019 l:001e48 d:000018 BLOCK /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb.rb:70
c:0006 p:---- s:0017 b:0017 l:000016 d:000016 FINISH
c:0005 p:---- s:0015 b:0015 l:000014 d:000014 CFUNC :catch
c:0004 p:0183 s:0011 b:0011 l:001e48 d:001e48 METHOD /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb.rb:69
c:0003 p:0142 s:0006 b:0006 l:0014e8 d:0004c8 EVAL /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/bin/irb:16
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:0014e8 d:0014e8 TOP
-- Ruby level backtrace information ----------------------------------------
/Users/dweinand/.rvm/rubies/ruby-1.9.2-head/bin/irb:16:in <main>' /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb.rb:69:in
start'
/Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb.rb:69:in catch' /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb.rb:70:in
block in start'
/Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb.rb:155:in eval_input' /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in
each_top_level_statement'
/Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in catch' /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in
block in each_top_level_statement'
/Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in loop' /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb/ruby-lex.rb:243:in
block (2 levels) in each_top_level_statement'
/Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb.rb:156:in block in eval_input' /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb.rb:273:in
signal_status'
/Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb.rb:159:in block (2 levels) in eval_input' /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb/context.rb:254:in
evaluate'
/Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb/workspace.rb:80:in evaluate' /Users/dweinand/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/irb/workspace.rb:80:in
eval'
(irb):2:in irb_binding' (irb):2:in
resume'
-- C level backtrace information -------------------------------------------
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html
This doesn't appear to be a problem on 1.9.3-head and may be related to Issue #4827.
=end
Updated by dweinand (Dan Weinand) over 13 years ago
=begin
Here's another stacktrace from running outside irb.
-e:1: [BUG] Bus Error
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.8.0]
-- control frame ----------
c:0004 p:---- s:0009 b:0009 l:000008 d:000008 CFUNC :resume
c:0003 p:0021 s:0006 b:0006 l:0014e8 d:002458 EVAL -e:1
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:0014e8 d:0014e8 TOP
-- Ruby level backtrace information ----------------------------------------
-e:1:in <main>' -e:1:in
resume'
-- C level backtrace information -------------------------------------------
0 libruby.1.9.1.dylib 0x000000010014c64e rb_vm_bugreport + 110
1 libruby.1.9.1.dylib 0x00000001000404c3 report_bug + 259
2 libruby.1.9.1.dylib 0x0000000100040631 rb_bug + 161
3 libruby.1.9.1.dylib 0x00000001000e30a2 sigbus + 18
4 libSystem.B.dylib 0x00007fff893571ba _sigtramp + 26
5 ??? 0x0000000100896420 0x0 + 4303971360
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html
=end
Updated by nagachika (Tomoyuki Chikanaga) over 13 years ago
I think this is similar to #4827 too.
r31954 is fix for this, but it cannot backport straightly because of r27635.
A patch for branch_1_9_2 is as follows
Index: cont.c¶
--- cont.c (revision 32347)
+++ cont.c (working copy)
@@ -882,6 +882,7 @@
/* no need to allocate vm stack */
fib = fiber_t_alloc(fiber_alloc(rb_cFiber));
fib->cont.type = ROOT_FIBER_CONTEXT;
-
fib->status = RUNNING;
fib->prev_fiber = fib->next_fiber = fib;return fib;
Updated by dweinand (Dan Weinand) over 13 years ago
Unfortunately, I'm still getting the bus error after applying that patch.
Updated by dweinand (Dan Weinand) over 13 years ago
Actually, this looks like it could be related to #4651. I'm going to check out that commit, and see if I can get things working.
Updated by dweinand (Dan Weinand) over 13 years ago
=begin
Yes! I can confirm that this is the same issue as #4651 and r32201 fixes it.
The commit applies cleanly to 1.9.2. Can we get it backported?
=end
Updated by sikachu (Prem Sichanugrist) over 13 years ago
Yes, I agree on backporting #4651 into 1.9.2 branch. It's impossible now for me to develop stuff using Lion, as I can't even run Rails's Action Pack test cleanly >_<
Thank you so much.
Updated by cjbottaro (Christopher Bottaro) over 13 years ago
I'm also getting this segfault any time I call Fiber#resume. Please backport asap. Thanks.
Updated by cjbottaro (Christopher Bottaro) over 13 years ago
I built Ruby-1.9.2-p290 patched with this commit: https://github.com/ruby/ruby/commit/be953b4d1ce3f0dfc7f24c84ec7a51e027102557
and now I get the following:
=begin
$ bundle exec rake test
rake/rdoctask is deprecated. Use rdoc/task instead (in RDoc 2.4.2+)
/Users/cjbottaro/.rbenv/versions/1.9.2-p290/bin/ruby -I"lib:lib:test" -I"/Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2/lib" "/Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2/lib/rake/rake_test_loader.rb" "test/**/test_*.rb"
Run options: --seed 50218
Running tests:¶
..../Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:764: [BUG] cfp consistency error - send
ruby 1.9.2p290 (2011-07-09) [x86_64-darwin11.1.0]
-- control frame ----------
c:0012 p:---- s:0044 b:0044 l:000043 d:000043 CFUNC :map
c:0011 p:0012 s:0041 b:0041 l:000040 d:000040 METHOD /Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:764
c:0010 p:0189 s:0036 b:0036 l:000035 d:000035 METHOD /Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:740
c:0009 p:0013 s:0026 b:0026 l:000025 d:000025 METHOD /Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:903
c:0008 p:0012 s:0023 b:0023 l:000014 d:000022 BLOCK /Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:890
c:0007 p:---- s:0020 b:0020 l:000019 d:000019 FINISH
c:0006 p:---- s:0018 b:0018 l:000017 d:000017 CFUNC :each
c:0005 p:0068 s:0015 b:0015 l:000014 d:000014 METHOD /Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:889
c:0004 p:0029 s:0011 b:0011 l:000010 d:000010 METHOD /Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:878
c:0003 p:0057 s:0007 b:0007 l:0019e8 d:001e80 BLOCK /Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:658
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:001bb8 d:001bb8 TOP
-- Ruby level backtrace information ----------------------------------------
/Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:658:in block in autorun' /Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:878:in
run'
/Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:889:in _run' /Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:889:in
each'
/Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:890:in block in _run' /Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:903:in
run_tests'
/Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:740:in _run_anything' /Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:764:in
_run_suites'
/Users/cjbottaro/Dropbox/Projects/fiber_storm/vendor/bundle/ruby/1.9.1/gems/minitest-2.5.0/lib/minitest/unit.rb:764:in `map'
-- C level backtrace information -------------------------------------------
0 ruby 0x000000010c61e4fe rb_vm_bugreport + 110
1 ruby 0x000000010c513133 report_bug + 259
2 ruby 0x000000010c5132a1 rb_bug + 161
3 ruby 0x000000010c610f2a vm_call_method + 2442
4 ruby 0x000000010c613cfe vm_exec_core + 11214
5 ruby 0x000000010c617e3e vm_exec + 94
6 ruby 0x000000010c618d66 rb_yield + 70
7 ruby 0x000000010c4e8def rb_ary_each + 95
8 ruby 0x000000010c60c2f0 call_cfunc + 112
9 ruby 0x000000010c610883 vm_call_method + 739
10 ruby 0x000000010c613cfe vm_exec_core + 11214
11 ruby 0x000000010c617e3e vm_exec + 94
12 ruby 0x000000010c6110e1 rb_vm_invoke_proc + 161
13 ruby 0x000000010c51693e rb_exec_end_proc + 430
14 ruby 0x000000010c516a15 ruby_finalize_0 + 85
15 ruby 0x000000010c516b32 ruby_cleanup + 258
16 ruby 0x000000010c516d89 ruby_run_node + 89
17 ruby 0x000000010c4e2b2f main + 79
18 ruby 0x000000010c4e2ad4 start + 52
19 ??? 0x0000000000000005 0x0 + 5
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html
rake aborted!
Command failed with status (): [/Users/cjbottaro/.rbenv/versions/1.9.2-p29...]
Tasks: TOP => test
(See full trace by running task with --trace)
=end
Updated by naruse (Yui NARUSE) over 8 years ago
- Status changed from Open to Rejected