2016-12-02 11 views
2

私は失敗する可能性のあるmallocを実行するCライブラリをラッピングしています。残りのRustはOOMで異常終了しますので、同じことをしたいと思います。 std::intrinsics::abort()core::intrinsics::abort()があります(違いは何ですか?)どちらも不安定です。錆処理を中止するにはどうしたらいいですか?

安定した錆で中断するにはどうしたらいいですか?

答えて

2

錆コードは、通常とリンクされているのでabort()機能はSIGABRTを発生させ、本来のGENながら:これは実際に固有abort異なること

extern { 
    fn abort(); 
} 

fn main() { 
    unsafe { abort(); } 
} 

注:abortが定義されているCランタイムライブラリは、あなたがexternブロックを使用してその機能をインポートすることができます無効な命令(ud2)が発生し、SIGILLが発生します。

うまくいけば、std::process::abortは今後安定します。

3

panic!()に電話することができます。

あなたが失敗した割り当てを傍受し、安定したプログラム状態で錆に戻ることができますしかし、もし、私が(など、Resultを使用して)それがエラーを報告した方が良いと思う

+0

私はOOM上で錆コードが 'panic!()'をしていないと推測します。なぜそれを使用したくないのですか? – Timmmm

+0

@Timmmmこれは、Rustがunwindを仮定してメモリを割り当て、1つのOOMが他に何も割り当てできないことを意味するからです。個人的には、それは「悲観的すぎて問題を引き起こす」と思う(https://internals.rust-lang.org/t/could-we-support-unwinding-from-oom-at-least-for-collections/3673)。 – Kornel

関連する問題