[xboxknrl] Implement ExTryToAcquireRWLShared.

[xboxknrl] Implement ExTryToAcquireReadWriteLockShared.
This commit is contained in:
gibbed 2022-01-07 09:20:09 -06:00 committed by Rick Gibbed
parent 1f9c434b5e
commit 600c14b3f0
1 changed files with 20 additions and 0 deletions

View File

@ -1236,6 +1236,26 @@ void ExAcquireReadWriteLockShared(pointer_t<X_ERWLOCK> lock_ptr) {
DECLARE_XBOXKRNL_EXPORT2(ExAcquireReadWriteLockShared, kThreading, kImplemented,
kBlocking);
dword_result_t ExTryToAcquireReadWriteLockShared(
pointer_t<X_ERWLOCK> lock_ptr) {
auto old_irql = xeKeKfAcquireSpinLock(&lock_ptr->spin_lock);
uint32_t result;
if (lock_ptr->lock_count < 0 ||
(lock_ptr->readers_entry_count && !lock_ptr->writers_waiting_count)) {
lock_ptr->lock_count++;
lock_ptr->readers_entry_count++;
result = 1;
} else {
result = 0;
}
xeKeKfReleaseSpinLock(&lock_ptr->spin_lock, old_irql);
return result;
}
DECLARE_XBOXKRNL_EXPORT1(ExTryToAcquireReadWriteLockShared, kThreading,
kImplemented);
void ExReleaseReadWriteLock(pointer_t<X_ERWLOCK> lock_ptr) {
auto old_irql = xeKeKfAcquireSpinLock(&lock_ptr->spin_lock);