Mike McCormack : kernel: Trying to lock an empty global memory block
gives an ERROR_DISCARDED.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jan 9 13:52:42 CST 2006
Module: wine
Branch: refs/heads/master
Commit: 3066397babcaaba3727cb40f375776394d54e932
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=3066397babcaaba3727cb40f375776394d54e932
Author: Mike McCormack <mike at codeweavers.com>
Date: Mon Jan 9 17:16:32 2006 +0100
kernel: Trying to lock an empty global memory block gives an ERROR_DISCARDED.
---
dlls/kernel/heap.c | 6 ++++--
dlls/kernel/tests/heap.c | 8 ++++++++
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel/heap.c b/dlls/kernel/heap.c
index ec3c24d..ac3b6b2 100644
--- a/dlls/kernel/heap.c
+++ b/dlls/kernel/heap.c
@@ -413,9 +413,11 @@ LPVOID WINAPI GlobalLock(
pintern = HANDLE_TO_INTERN(hmem);
if (pintern->Magic == MAGIC_GLOBAL_USED)
{
- if (pintern->LockCount < GLOBAL_LOCK_MAX)
- pintern->LockCount++;
palloc = pintern->Pointer;
+ if (!pintern->Pointer)
+ SetLastError(ERROR_DISCARDED);
+ else if (pintern->LockCount < GLOBAL_LOCK_MAX)
+ pintern->LockCount++;
}
else
{
diff --git a/dlls/kernel/tests/heap.c b/dlls/kernel/tests/heap.c
index e5b1e17..27a51cf 100644
--- a/dlls/kernel/tests/heap.c
+++ b/dlls/kernel/tests/heap.c
@@ -102,4 +102,12 @@ START_TEST(heap)
gbl = LocalReAlloc(0, 10, LMEM_MOVEABLE);
ok(gbl == NULL, "local realloc allocated memory\n");
+ /* trying to lock empty memory should give an error */
+ gbl = GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,0);
+ ok(gbl != NULL, "returned NULL\n");
+ SetLastError(0xdeadbeef);
+ mem = GlobalLock(gbl);
+ ok( GetLastError() == ERROR_DISCARDED, "should return an error\n");
+ ok( mem == NULL, "should return NULL\n");
+ GlobalFree(gbl);
}
More information about the wine-cvs
mailing list