Android: паника не проходит через границу SDL_main

catch_unwind вокруг запуска клиента: аддон или драйвер не должны ронять
процесс через FFI-барьер (правило AGENTS.md №2).
This commit is contained in:
Niko Marmeladkov 2026-10-23 14:21:51 +03:00
parent 8d572b8190
commit b28d6f9f25

View file

@ -215,11 +215,22 @@ pub unsafe extern "C" fn SDL_main(
} }
} }
match run(args) { match std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| run(args))) {
Ok(()) => 0, Ok(Ok(())) => 0,
Err(err) => { Ok(Err(err)) => {
tracing::error!("{err:#}"); tracing::error!("{err:#}");
1 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
}
} }
} }