mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 08:33:12 -05:00
scePthreadCancel and pthread_cancel threw, scePthreadTestcancel did nothing and the cleanup handler exports did not exist. A cancel request is now recorded on the thread and acted on at scePthreadTestcancel, the condition variable waits, scePthreadSem and sem waits, scePthreadJoin and the sleeps, and under their POSIX names. A thread blocked in one of the waits is woken; a condition wait takes its mutex back before the thread exits. The thread exits with PTHREAD_CANCELED through scePthreadExit, which now runs the handlers of __pthread_cleanup_push_imp and __pthread_cleanup_pop_imp. scePthreadSetcancelstate and scePthreadSetcanceltype reject unknown values, and pthread_setcanceltype is added. Constants, the handler node layout and the order of events follow FreeBSD libthr. A sleep is not interrupted, file and socket calls are not cancellation points and the asynchronous type acts like the deferred one except at the two set calls (TechnicalDebt). New test: guest_pthread_cancel.