Module: wine Branch: refs/heads/master Commit: 3066397babcaaba3727cb40f375776394d54e932 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=3066397babcaaba3727cb40f...
Author: Mike McCormack mike@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); }