From 348bef46b7a008be4d3e8349b093669484dea221 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 26 Apr 2012 21:48:06 +0000 Subject: [PATCH] [WIN32K] - 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 --- reactos/win32ss/gdi/ntgdi/bitblt.c | 2 +- reactos/win32ss/gdi/ntgdi/gdiobj.c | 1 + reactos/win32ss/user/ntuser/win32.h | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/reactos/win32ss/gdi/ntgdi/bitblt.c b/reactos/win32ss/gdi/ntgdi/bitblt.c index 0fbab55e865..d3dede27536 100644 --- a/reactos/win32ss/gdi/ntgdi/bitblt.c +++ b/reactos/win32ss/gdi/ntgdi/bitblt.c @@ -1156,7 +1156,7 @@ NtGdiGetPixel( /* Call the copy bits function */ bResult = IntEngCopyBits(&psurfDest->SurfObj, &psurfSrc->SurfObj, - pdc->rosdc.CombinedClip, + NULL, &exlo.xlo, &rclDest, &ptlSrc); diff --git a/reactos/win32ss/gdi/ntgdi/gdiobj.c b/reactos/win32ss/gdi/ntgdi/gdiobj.c index d5e5a11ae73..e2ed22edf1c 100644 --- a/reactos/win32ss/gdi/ntgdi/gdiobj.c +++ b/reactos/win32ss/gdi/ntgdi/gdiobj.c @@ -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); } } diff --git a/reactos/win32ss/user/ntuser/win32.h b/reactos/win32ss/user/ntuser/win32.h index efb001c54da..3ec0f54adcb 100644 --- a/reactos/win32ss/user/ntuser/win32.h +++ b/reactos/win32ss/user/ntuser/win32.h @@ -108,7 +108,7 @@ typedef struct _THREADINFO SINGLE_LIST_ENTRY ReferencesList; ULONG cExclusiveLocks; #if DBG - USHORT acExclusiveLockCount[GDIObjTypeTotal]; + USHORT acExclusiveLockCount[GDIObjTypeTotal + 1]; #endif } THREADINFO;