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