- 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 */
bResult = IntEngCopyBits(&psurfDest->SurfObj,
&psurfSrc->SurfObj,
pdc->rosdc.CombinedClip,
NULL,
&exlo.xlo,
&rclDest,
&ptlSrc);

View file

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

View file

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