mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 08:33:12 -05:00
A failing _Pad primitive threw a host std::runtime_error, which no guest catch can see. threadcall.cpp calls the checked wrappers of xthread (_Mtx_lockX, _Cnd_waitX, _Thrd_startX), which pass a non-success code to _Throw_C_error: _Thrd_nomem and _Thrd_timedout become resource_unavailable_try_again, _Thrd_busy device_or_resource_busy and _Thrd_error invalid_argument, raised through _Throw_Cpp_error, which main now implements. A failing thread start is _Thrd_startX's resource_unavailable_try_again. _Release now wakes the launching thread with _Cnd_signal, as threadcall.cpp does; libc has it since the pad was written. guest_ampr_threads checks, in a forked child whose guest terminate handler reports the thrown object, that _Release on the thread still holding the pad's mutex throws std::system_error with EBUSY. It fails with the previous host exception and with busy mapped to invalid_argument.