diff options
| author | Kouhei Sutou <[email protected]> | 2016-03-06 11:58:54 +0900 |
|---|---|---|
| committer | Kouhei Sutou <[email protected]> | 2016-03-06 11:58:54 +0900 |
| commit | f1eb3aea114cbd1e2622cbe9618571f3e1eec115 (patch) | |
| tree | 1eb3d36738e3c0fe87366347ab6004d01d22abf7 /examples | |
| parent | d77c72dac5b46dacc8332bca73a8398ae2cf9a78 (diff) | |
| download | mruby-f1eb3aea114cbd1e2622cbe9618571f3e1eec115.tar.gz mruby-f1eb3aea114cbd1e2622cbe9618571f3e1eec115.zip | |
Fix segmentation fault by backtrace and GC
GitHub: fix #3122
It reverts #3126. #3126 fixes the segmentation fault but generates
broken backtrace.
This change fixes the segmentation fault and generates correct
backtrace. The strategy of this change is "generating backtrace while
irep is alive".
/tmp/test.rb:
def gen
e0 = nil
begin
1.times {
raise 'foobar'
}
rescue => e
e0 = e
end
e0
end
e = gen
GC.start
gen
GC.start
puts e.backtrace.join("\n")
Run:
% bin/mruby /tmp/test.rb
/tmp/test.rb:5:in Object.gen
/home/kou/work/ruby/mruby.kou/mrblib/numeric.rb:77:in Integral#times
/tmp/test.rb:4:in Object.gen
/tmp/test.rb:13
FYI:
% ruby -v /tmp/test.rb
ruby 2.3.0p0 (2015-12-25) [x86_64-linux-gnu]
/tmp/test.rb:5:in `block in gen'
/tmp/test.rb:4:in `times'
/tmp/test.rb:4:in `gen'
/tmp/test.rb:13:in `<main>'
Diffstat (limited to 'examples')
0 files changed, 0 insertions, 0 deletions
