mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2024-12-28 02:26:07 +00:00
hot-fix: Fix race in rwlock
Some checks are pending
Build and Release / reuse (push) Waiting to run
Build and Release / clang-format (push) Waiting to run
Build and Release / get-info (push) Waiting to run
Build and Release / windows-sdl (push) Blocked by required conditions
Build and Release / windows-qt (push) Blocked by required conditions
Build and Release / macos-sdl (push) Blocked by required conditions
Build and Release / macos-qt (push) Blocked by required conditions
Build and Release / linux-sdl (push) Blocked by required conditions
Build and Release / linux-qt (push) Blocked by required conditions
Build and Release / pre-release (push) Blocked by required conditions
Some checks are pending
Build and Release / reuse (push) Waiting to run
Build and Release / clang-format (push) Waiting to run
Build and Release / get-info (push) Waiting to run
Build and Release / windows-sdl (push) Blocked by required conditions
Build and Release / windows-qt (push) Blocked by required conditions
Build and Release / macos-sdl (push) Blocked by required conditions
Build and Release / macos-qt (push) Blocked by required conditions
Build and Release / linux-sdl (push) Blocked by required conditions
Build and Release / linux-qt (push) Blocked by required conditions
Build and Release / pre-release (push) Blocked by required conditions
Resetting the owner should be before the lock is unlocked, otherwise a waiter might lock and set a new owner before its reset.
This commit is contained in:
parent
714605c6a7
commit
7f4265834a
|
@ -177,13 +177,13 @@ int PS4_SYSV_ABI posix_pthread_rwlock_unlock(PthreadRwlockT* rwlock) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prwlock->owner == curthread) {
|
if (prwlock->owner == curthread) {
|
||||||
prwlock->lock.unlock();
|
|
||||||
prwlock->owner = nullptr;
|
prwlock->owner = nullptr;
|
||||||
|
prwlock->lock.unlock();
|
||||||
} else {
|
} else {
|
||||||
prwlock->lock.unlock_shared();
|
|
||||||
if (prwlock->owner == nullptr) {
|
if (prwlock->owner == nullptr) {
|
||||||
curthread->rdlock_count--;
|
curthread->rdlock_count--;
|
||||||
}
|
}
|
||||||
|
prwlock->lock.unlock_shared();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue