Android: паника не проходит через границу SDL_main
catch_unwind вокруг запуска клиента: аддон или драйвер не должны ронять процесс через FFI-барьер (правило AGENTS.md №2).
This commit is contained in:
parent
8d572b8190
commit
b28d6f9f25
1 changed files with 14 additions and 3 deletions
|
|
@ -215,11 +215,22 @@ pub unsafe extern "C" fn SDL_main(
|
|||
}
|
||||
}
|
||||
|
||||
match run(args) {
|
||||
Ok(()) => 0,
|
||||
Err(err) => {
|
||||
match std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| run(args))) {
|
||||
Ok(Ok(())) => 0,
|
||||
Ok(Err(err)) => {
|
||||
tracing::error!("{err:#}");
|
||||
1
|
||||
}
|
||||
Err(payload) => {
|
||||
// Паника не должна проходить через FFI-границу SDL: ловим её и
|
||||
// отдаём код ошибки, как того требует правило проекта.
|
||||
let message = payload
|
||||
.downcast_ref::<&str>()
|
||||
.copied()
|
||||
.or_else(|| payload.downcast_ref::<String>().map(String::as_str))
|
||||
.unwrap_or("неизвестная паника");
|
||||
tracing::error!("паника в SDL_main: {message}");
|
||||
2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue