Issue #5013 has been reported by Motohiro KOSAKI.
Bug #5013: bootstrap/runner.rb の assert_normal_exit() がSEGVを検知できないことがある
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 に入れてしまいたいので
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を検知できないことがある
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 に入れてしまいたいので
Issue #5013 has been updated by Motohiro KOSAKI.
Status changed from Assigned to Closed
r32490.
Bug #5013: bootstrap/runner.rb の assert_normal_exit() がSEGVを検知できないことがある
Author: Motohiro KOSAKI
Status: Closed
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 に入れてしまいたいので