Actions
Bug #5013
closedbootstrap/runner.rb の assert_normal_exit() がSEGVを検知できないことがある
Description
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 に入れてしまいたいので
Updated by kosaki (Motohiro KOSAKI) over 13 years ago
何人かの人と相談のうえ、結局 rubyのsigsegvを直すことにしました。今後は
・普通のSEGV
→ rb_bug()経由でabrot()
・SEGV中にさらにSEGV
→ 直接abort() を呼ぶ
のようになり、統一された動作となります。
後から気づいたのですが、さらにいうと、exit()はasync signal safe じゃないので元々論外でした。
exit()は内部でロック取るのでデッドロックリスクあり。
Updated by kosaki (Motohiro KOSAKI) over 13 years ago
- Status changed from Assigned to Closed
r32490.
Actions
Like0
Like0Like0