//
// Enters a Guarded Region
//
-#define KeEnterGuardedRegion() \
+#define KeEnterGuardedRegionThread(_Thread) \
{ \
- PKTHREAD _Thread = KeGetCurrentThread(); \
- \
/* Sanity checks */ \
ASSERT(KeGetCurrentIrql() <= APC_LEVEL); \
+ ASSERT(_Thread == KeGetCurrentThread()); \
ASSERT((_Thread->SpecialApcDisable <= 0) && \
(_Thread->SpecialApcDisable != -32768)); \
\
_Thread->SpecialApcDisable--; \
}
+#define KeEnterGuardedRegion() \
+{ \
+ PKTHREAD _Thread = KeGetCurrentThread(); \
+ KeEnterGuardedRegionThread(_Thread); \
+}
+
//
// Leaves a Guarded Region
//
-#define KeLeaveGuardedRegion() \
+#define KeLeaveGuardedRegionThread(_Thread) \
{ \
- PKTHREAD _Thread = KeGetCurrentThread(); \
- \
/* Sanity checks */ \
ASSERT(KeGetCurrentIrql() <= APC_LEVEL); \
+ ASSERT(_Thread == KeGetCurrentThread()); \
ASSERT(_Thread->SpecialApcDisable < 0); \
\
/* Leave region and check if APCs are OK now */ \
} \
}
+#define KeLeaveGuardedRegion() \
+{ \
+ PKTHREAD _Thread = KeGetCurrentThread(); \
+ KeLeaveGuardedRegionThread(_Thread); \
+}
+
//
// Enters a Critical Region
//
-#define KeEnterCriticalRegion() \
+#define KeEnterCriticalRegionThread(_Thread) \
{ \
- PKTHREAD _Thread = KeGetCurrentThread(); \
- \
/* Sanity checks */ \
+ ASSERT(_Thread == KeGetCurrentThread()); \
ASSERT((_Thread->KernelApcDisable <= 0) && \
(_Thread->KernelApcDisable != -32768)); \
\
_Thread->KernelApcDisable--; \
}
+#define KeEnterCriticalRegion() \
+{ \
+ PKTHREAD _Thread = KeGetCurrentThread(); \
+ KeEnterCriticalRegionThread(_Thread); \
+}
+
//
// Leaves a Critical Region
//
-#define KeLeaveCriticalRegion() \
+#define KeLeaveCriticalRegionThread(_Thread) \
{ \
- PKTHREAD _Thread = KeGetCurrentThread(); \
- \
/* Sanity checks */ \
+ ASSERT(_Thread == KeGetCurrentThread()); \
ASSERT(_Thread->KernelApcDisable < 0); \
\
/* Enable Kernel APCs */ \
} \
}
+#define KeLeaveCriticalRegion() \
+{ \
+ PKTHREAD _Thread = KeGetCurrentThread(); \
+ KeLeaveCriticalRegionThread(_Thread); \
+}
+
#ifndef CONFIG_SMP
//
ASSERT(GuardedMutex->Owner != Thread);
/* Disable Special APCs */
- KeEnterGuardedRegion();
+ KeEnterGuardedRegionThread(Thread);
/* Remove the lock */
if (!InterlockedBitTestAndReset(&GuardedMutex->Count, GM_LOCK_BIT_V))
VOID
_KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
{
+ PKTHREAD Thread = KeGetCurrentThread();
LONG OldValue, NewValue;
/* Sanity checks */
ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
ASSERT(GuardedMutex->Owner == KeGetCurrentThread());
- ASSERT(KeGetCurrentThread()->SpecialApcDisable ==
- GuardedMutex->SpecialApcDisable);
+ ASSERT(Thread->SpecialApcDisable == GuardedMutex->SpecialApcDisable);
/* Destroy the Owner */
GuardedMutex->Owner = NULL;
}
/* Re-enable APCs */
- KeLeaveGuardedRegion();
+ KeLeaveGuardedRegionThread(Thread);
}
FORCEINLINE
PKTHREAD Thread = KeGetCurrentThread();
/* Block APCs */
- KeEnterGuardedRegion();
+ KeEnterGuardedRegionThread(Thread);
/* Remove the lock */
if (!InterlockedBitTestAndReset(&GuardedMutex->Count, GM_LOCK_BIT_V))
{
/* Re-enable APCs */
- KeLeaveGuardedRegion();
+ KeLeaveGuardedRegionThread(Thread);
YieldProcessor();
/* Return failure */