mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-23 09:03:22 -05:00
Two defects found in review of the Linux delivery: A raise right after scePthreadCreate reached the new thread before RunThread set currentThread, so scePthreadSelf() in the handler adopted a second handle, and could deadlock on glibc's thread lock when the signal interrupted pthread_getattr_np. The creator now blocks all signals around the std::thread construction, so the child starts with them blocked, and RunThread restores the creator's mask once the thread is registered, as libthr does. A raise in that window stays pending and is delivered just before the entry runs. A handler that set reserved MXCSR bits made rt_sigreturn fail with SIGSEGV. The MXCSR the handler leaves is now masked with the frame's MXCSR_MASK (0xffbf when it reads 0), as FreeBSD's fpusetregs does, on both platforms; Windows also keeps CONTEXT.MxCsr equal to FltSave.MxCsr. guest_raise_exception raises right after each of 50 thread creations and checks scePthreadSelf() in the handler, and its context round trip sets a reserved MXCSR bit and FZ and checks that only FZ is kept. AI-assisted: yes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwJx7AHrSUaMGSpEGhL1Kb