Implement conversion of shared push lock to exclusive mode

이 커밋은 다음에 포함됨:
2026-07-01 16:29:30 +02:00
부모 c58305022f
커밋 5cd52a4a12
2개의 변경된 파일과 26개의 추가작업 그리고 0개의 파일을 삭제
+1
파일 보기
@@ -22,6 +22,7 @@ namespace KE
STATIC XTFASTCALL VOID AcquireSharedPushLock(PKPUSH_LOCK PushLock); STATIC XTFASTCALL VOID AcquireSharedPushLock(PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID AcquireWaitExclusivePushLock(IN PKPUSH_LOCK PushLock); STATIC XTFASTCALL VOID AcquireWaitExclusivePushLock(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID AcquireWaitSharedPushLock(IN OUT PKPUSH_LOCK PushLock); STATIC XTFASTCALL VOID AcquireWaitSharedPushLock(IN OUT PKPUSH_LOCK PushLock);
STATIC XTFASTCALL BOOLEAN ConvertSharedPushLockToExclusive(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID InitializePushLock(IN PKPUSH_LOCK PushLock); STATIC XTFASTCALL VOID InitializePushLock(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID ReleaseExclusivePushLock(IN PKPUSH_LOCK PushLock); STATIC XTFASTCALL VOID ReleaseExclusivePushLock(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID ReleasePushLock(IN PKPUSH_LOCK PushLock); STATIC XTFASTCALL VOID ReleasePushLock(IN PKPUSH_LOCK PushLock);
+25
파일 보기
@@ -299,6 +299,31 @@ KE::PushLock::AcquireWaitSharedPushLock(IN PKPUSH_LOCK PushLock)
} }
} }
/**
* Attempts to convert a push lock from shared to exclusive access.
*
* @param PushLock
* Supplies a pointer to the push lock structure.
*
* @return This routine returns TRUE if the lock was successfully converted to exclusive mode, or FALSE otherwise.
*
* @since XT 1.0
*/
XTFASTCALL
BOOLEAN
KE::PushLock::ConvertSharedPushLockToExclusive(IN PKPUSH_LOCK PushLock)
{
PVOID OldValue;
/* Swap the push lock state */
OldValue = RTL::Atomic::CompareExchangePointer(&PushLock->Ptr,
(PVOID)KPUSHLOCK_INCREMENT_SHARED,
(PVOID)KPUSHLOCK_LOCK);
/* Return conversion result */
return (OldValue == (PVOID)KPUSHLOCK_INCREMENT_SHARED);
}
/** /**
* Initializes a push lock. * Initializes a push lock.
* *