From: Motohiro KOSAKI Date: 2011-07-10T16:16:48+09:00 Subject: [ruby-dev:44080] [Ruby 1.9 - Bug #5013] bootstrap/runner.rb の assert_normal_exit() がSEGVを検知できないことがある Issue #5013 has been updated by Motohiro KOSAKI. 何人かの人と相談のうえ、結局 rubyのsigsegvを直すことにしました。今後は ・普通のSEGV → rb_bug()経由でabrot() ・SEGV中にさらにSEGV → 直接abort() を呼ぶ のようになり、統一された動作となります。 後から気づいたのですが、さらにいうと、exit()はasync signal safe じゃないので元々論外でした。 exit()は内部でロック取るのでデッドロックリスクあり。 ---------------------------------------- Bug #5013: bootstrap/runner.rb の assert_normal_exit() がSEGVを検知できないことがある http://redmine.ruby-lang.org/issues/5013 Author: Motohiro KOSAKI Status: Assigned Priority: Normal Assignee: Motohiro KOSAKI Category: core Target version: 1.9.3 ruby -v: - Bug#4992 をコミットしようとして気づいたのですが、 bootstrap/runner.rb の assert_normal_exit() がSEGVを検知しそこねることがあります。原因は 1.assert_normal_exit はシグナルで死んだ場合のみ F. exit(1) はテスト成功とみなす 2.rubyのsigsegv()はnested SEGVが起きたときに exit(SIGSEGV) でも abort() でもなく、exit(EXIT_FAILURE) を使う の2つの仕様の不整合にあります。どちらも現在の仕様になっている理由が更新履歴から読み取れなかったので どちらを直すべきか迷っています。 #(1)はakrさんが最初にこの関数を作ったときからの仕様、(2)はYARVがマージされた時からの仕様です。 お手数ですが、アドバイスお願いできないでしょうか。1.9.3 に入れてしまいたいので -- http://redmine.ruby-lang.org