- add missing  DBG_DECREASE_LOCK_COUNT() when deleting an object that was exclusively locked. Fixes strange hang in comctl32_winetest.
The question is: why does changing a variable, which is never checked cause such trouble?
- Don't pass the DC's clip object to IntEngCopyBits, when querying a pixel
- make acExclusiveLockCount[] 0x20 bytes long, just to be really sure, that (x & 0x1F) does never overflow it.

svn path=/trunk/; revision=56433
This commit is contained in:
Timo Kreuzer 2012-04-26 21:48:06 +00:00
parent 46a246e79b
commit 348bef46b7
3 changed files with 3 additions and 2 deletions

View file

@ -1156,7 +1156,7 @@ NtGdiGetPixel(
/* Call the copy bits function */ /* Call the copy bits function */
bResult = IntEngCopyBits(&psurfDest->SurfObj, bResult = IntEngCopyBits(&psurfDest->SurfObj,
&psurfSrc->SurfObj, &psurfSrc->SurfObj,
pdc->rosdc.CombinedClip, NULL,
&exlo.xlo, &exlo.xlo,
&rclDest, &rclDest,
&ptlSrc); &ptlSrc);

View file

@ -880,6 +880,7 @@ GDIOBJ_vDeleteObject(POBJ pobj)
/* Release the pushlock and reenable APCs */ /* Release the pushlock and reenable APCs */
ExReleasePushLockExclusive(&pobj->pushlock); ExReleasePushLockExclusive(&pobj->pushlock);
KeLeaveCriticalRegion(); KeLeaveCriticalRegion();
DBG_DECREASE_LOCK_COUNT(PsGetCurrentProcessWin32Process(), pobj->hHmgr);
} }
} }

View file

@ -108,7 +108,7 @@ typedef struct _THREADINFO
SINGLE_LIST_ENTRY ReferencesList; SINGLE_LIST_ENTRY ReferencesList;
ULONG cExclusiveLocks; ULONG cExclusiveLocks;
#if DBG #if DBG
USHORT acExclusiveLockCount[GDIObjTypeTotal]; USHORT acExclusiveLockCount[GDIObjTypeTotal + 1];
#endif #endif
} THREADINFO; } THREADINFO;