Segmentation fault on ruby 2.3.0preview2
Closed this issue · 12 comments
以下の手順で rabbit を起動し、起動後に次のスライドを表示されるために "j" をプレスすると Segmentation fault して、rabbit が終了してしまいます。
期待する動作は rabbit が終了せずに、次のページが表示されることです。
コマンド
$ rabbit-slide new --id sample --base-name sample --markup-language rd
$ cd sample
$ rabbit &> error.txt
エラーログ
タイトルだけでなくログも間違っていたので、ログも2.3.0preview2に更新しました。
報告ありがとうございます。
Rabbitのインストール方法も教えてもらえますか?
gem install rabbit
でインストールしました。
インストールした rabbit のバージョンは2.1.8です。
ありがとうございます。
Rubyのインストール方法も教えてもらえますか?できればそのときのログも一緒にもらえると助かります。
(preview2用にちゃんとすべてのgemをリビルドしているかが気になっています。)
Ruby は rbenv でインストールしました ( rbenv install 2.3.0-preview2
)
以下がそのときのログですが、これでよろしいでしょうか?
https://gist.github.com/kunitoo/0f216aca4afd96bf18d8#file-ruby-build-20151211105213-2294-log
また、 rbenv-default-gems を使っているため、install 後に以下の gem のインストールが走ります。
- bundler
- tmuxinator
- rails
ありがとうございます。手元でも再現しました。
たぶん、これ、GCまわりのバグですね。。。Ruby-GNOME2由来のオブジェクトのマークが漏れている気がするんですけど。。。
Ruby 2.3.0のバグな気がしました。
GC.start
def a
lambda do
yield
end
end
def b(&block)
a(&block)
end
def proc_sources
sources = {}
ObjectSpace.each_object(Proc) do |proc|
sources[proc.object_id] = proc.source_location
end
sources
end
c = b {}
old_proc_sources = proc_sources
GC.start
new_proc_sources = proc_sources
require "pp"
pp((old_proc_sources.keys - new_proc_sources.keys).collect {|key| old_proc_sources[key]})
# => [["/tmp/a.rb", 21]]
のコードで、c = b {}
で指定したブロック({}
)がGCされます。これはa
が作ったブロックから参照されているのでGCされて欲しくないやつです。
クラッシュするので報告しておきました。 https://bugs.ruby-lang.org/issues/11846
ありがとうございます。
Ruby 2.3.0で動くようになっていたらcloseしてもらえますか?
Ruby 2.3.0 で動くようになったのを確認しました。ありがとうございます。
確認ありがとうございます!