Robert Shearman : kernel32: Return an error when unlocking a global with a zero lock count.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jan 10 14:14:05 CST 2006


Module: wine
Branch: refs/heads/master
Commit: cb7aa0306e0b7f6aa35090df7a8d08597b74c6e3
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=cb7aa0306e0b7f6aa35090df7a8d08597b74c6e3

Author: Robert Shearman <rob at codeweavers.com>
Date:   Tue Jan 10 19:59:15 2006 +0100

kernel32: Return an error when unlocking a global with a zero lock count.
Rename GLOBAL_LOCK_MAX to the public GMEM_LOCKCOUNT.

---

 dlls/kernel/heap.c |   20 +++++++++++++-------
 1 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/dlls/kernel/heap.c b/dlls/kernel/heap.c
index ac3b6b2..6c0b913 100644
--- a/dlls/kernel/heap.c
+++ b/dlls/kernel/heap.c
@@ -299,7 +299,6 @@ SIZE_T WINAPI HeapSize( HANDLE heap, DWO
  */
 
 #define MAGIC_GLOBAL_USED 0x5342
-#define GLOBAL_LOCK_MAX   0xFF
 #define HANDLE_TO_INTERN(h)  ((PGLOBAL32_INTERN)(((char *)(h))-2))
 #define INTERN_TO_HANDLE(i)  ((HGLOBAL) &((i)->Pointer))
 #define POINTER_TO_HANDLE(p) (*(((HGLOBAL *)(p))-2))
@@ -416,8 +415,8 @@ LPVOID WINAPI GlobalLock(
             palloc = pintern->Pointer;
             if (!pintern->Pointer)
                 SetLastError(ERROR_DISCARDED);
-            else if (pintern->LockCount < GLOBAL_LOCK_MAX)
-                    pintern->LockCount++;
+            else if (pintern->LockCount < GMEM_LOCKCOUNT)
+                pintern->LockCount++;
         }
         else
         {
@@ -461,11 +460,18 @@ BOOL WINAPI GlobalUnlock(
         pintern=HANDLE_TO_INTERN(hmem);
         if(pintern->Magic==MAGIC_GLOBAL_USED)
         {
-            if((pintern->LockCount<GLOBAL_LOCK_MAX)&&(pintern->LockCount>0))
+            if(pintern->LockCount)
+            {
                 pintern->LockCount--;
-
-            locked = (pintern->LockCount != 0);
-            if (!locked) SetLastError(NO_ERROR);
+                locked = (pintern->LockCount != 0);
+                if (!locked) SetLastError(NO_ERROR);
+            }
+            else
+            {
+                WARN("%p not locked\n", hmem);
+                SetLastError(ERROR_NOT_LOCKED);
+                locked = FALSE;
+            }
         }
         else
         {




More information about the wine-cvs mailing list