mirror of
https://github.com/reactos/reactos.git
synced 2024-10-04 16:36:11 +00:00
[WIN32K]
Implement exclusive lock order checks for GDI objects in debug builds svn path=/trunk/; revision=65731
This commit is contained in:
parent
c6f684e727
commit
72bceaffc2
|
@ -71,6 +71,22 @@ DECREASE_THREAD_LOCK_COUNT(
|
|||
}
|
||||
|
||||
#if DBG
|
||||
VOID
|
||||
ASSERT_LOCK_ORDER(
|
||||
_In_ UCHAR objt)
|
||||
{
|
||||
PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
|
||||
ULONG i;
|
||||
|
||||
if (pti)
|
||||
{
|
||||
/* Ensure correct locking order! */
|
||||
for (i = objt + 1; i < GDIObjTypeTotal; i++)
|
||||
{
|
||||
NT_ASSERT(pti->acExclusiveLockCount[i] == 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
#define ASSERT_SHARED_OBJECT_TYPE(objt) \
|
||||
ASSERT((objt) == GDIObjType_SURF_TYPE || \
|
||||
(objt) == GDIObjType_PAL_TYPE || \
|
||||
|
@ -83,6 +99,7 @@ DECREASE_THREAD_LOCK_COUNT(
|
|||
#define ASSERT_TRYLOCK_OBJECT_TYPE(objt) \
|
||||
ASSERT((objt) == GDIObjType_DRVOBJ_TYPE)
|
||||
#else
|
||||
#define ASSERT_LOCK_ORDER(hobj)
|
||||
#define ASSERT_SHARED_OBJECT_TYPE(objt)
|
||||
#define ASSERT_EXCLUSIVE_OBJECT_TYPE(objt)
|
||||
#define ASSERT_TRYLOCK_OBJECT_TYPE(objt)
|
||||
|
@ -669,6 +686,9 @@ GDIOBJ_TryLockObject(
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* Make sure lock order is correct */
|
||||
ASSERT_LOCK_ORDER(objt);
|
||||
|
||||
/* Reference the handle entry */
|
||||
pentry = ENTRY_ReferenceEntryByHandle(hobj, 0);
|
||||
if (!pentry)
|
||||
|
@ -735,6 +755,9 @@ GDIOBJ_LockObject(
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* Make sure lock order is correct */
|
||||
ASSERT_LOCK_ORDER(objt);
|
||||
|
||||
/* Reference the handle entry */
|
||||
pentry = ENTRY_ReferenceEntryByHandle(hobj, 0);
|
||||
if (!pentry)
|
||||
|
|
Loading…
Reference in a new issue