[WIN32K]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 26 Apr 2012 21:48:06 +0000 (21:48 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 26 Apr 2012 21:48:06 +0000 (21:48 +0000)
- 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
reactos/win32ss/gdi/ntgdi/gdiobj.c
reactos/win32ss/user/ntuser/win32.h

index 0fbab55..d3dede2 100644 (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);
index d5e5a11..e2ed22e 100644 (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);
         }
     }
 
index efb001c..3ec0f54 100644 (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;