下面的Rust程序stdout
在atexit
处理程序中访问时会发生恐慌.
extern crate libc;
extern "C" fn bye() {
println!("bye");
}
fn main() {
println!("hello");
unsafe { libc::atexit(bye) };
}
Run Code Online (Sandbox Code Playgroud)
输出:
hello
thread '<main>' panicked at 'cannot access stdout during shutdown', ../src/libcore/option.rs:298
fatal runtime error: Could not unwind stack, error = 5
An unknown error occurred
Run Code Online (Sandbox Code Playgroud)
在我看来,这个注册应该在我们atexit
注册之前运行,所以处理程序中的这一行应该只在我们的自定义处理程序之后运行.因此它不应该恐慌.
您可能会混淆libc::atexit
,并且sys_common::at_exit
(在src/libstd/sys/common/mod.rs中)链接指向哪个以及Rust在早期清理期间调用的内容.
这是两个不同的清理队列,我不想依赖它们按特定顺序执行.
归档时间: |
|
查看次数: |
737 次 |
最近记录: |