fix(libkernel): accept a zero count in sceKernelSignalSema
sceKernelSignalSema threw invalid_argument for a count of 0. Marvel's Wolverine (PPSA03671) signals with a count computed as min(a, b) - c, which can be 0, and ignores the result, so the throw ended the title a few minutes in. A zero count now adds no tokens and returns SCE_OK, as in shadPS4 and Kyty. A null semaphore and a negative count still throw. guest_kernel_errors signals 0 on a full and on an empty semaphore and checks that the count is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 7191d34c4d79622ba71087f0da2b75eb81ad2c23)
This commit is contained in:
parent
57f96fd2b3
commit
45a561aea5
|
|
@ -36,7 +36,7 @@ int APS5_VABI sceKernelPollSema(KernelSema sem, int need) {
|
|||
}
|
||||
|
||||
int APS5_VABI sceKernelSignalSema(KernelSema sem, int count) {
|
||||
if (sem == nullptr || count <= 0) {
|
||||
if (sem == nullptr || count < 0) {
|
||||
APS5_INVALID_ARG_EX;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -62,7 +62,10 @@ int main() {
|
|||
Require(sceKernelCreateSema(&semaphore, "limit", 1, 1, 3, nullptr) == SCE_OK);
|
||||
Require(sceKernelSignalSema(semaphore, 3) == SCE_KERNEL_ERROR_EINVAL);
|
||||
Require(sceKernelSignalSema(semaphore, 2) == SCE_OK);
|
||||
Require(sceKernelSignalSema(semaphore, 0) == SCE_OK);
|
||||
Require(sceKernelPollSema(semaphore, 3) == SCE_OK);
|
||||
Require(sceKernelSignalSema(semaphore, 0) == SCE_OK);
|
||||
Require(sceKernelPollSema(semaphore, 1) == SCE_KERNEL_ERROR_EBUSY);
|
||||
Require(sceKernelDeleteSema(semaphore) == SCE_OK);
|
||||
|
||||
KernelEqueue eq = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue