Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/kernel32/heap.c | 4 +++- dlls/kernel32/tests/heap.c | 1 - 2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/heap.c b/dlls/kernel32/heap.c index dbb240d89fc..9cce4402aed 100644 --- a/dlls/kernel32/heap.c +++ b/dlls/kernel32/heap.c @@ -234,8 +234,10 @@ void *WINAPI GlobalLock( HGLOBAL handle ) */ BOOL WINAPI GlobalUnlock( HGLOBAL handle ) { + BOOL ret; if (unsafe_ptr_from_HLOCAL( handle )) return TRUE; - return LocalUnlock( handle ); + if ((ret = LocalUnlock( handle )) || !GetLastError()) return ret; + return GetLastError() != ERROR_NOT_LOCKED; }
diff --git a/dlls/kernel32/tests/heap.c b/dlls/kernel32/tests/heap.c index 476be96cea8..25f5e367e7c 100644 --- a/dlls/kernel32/tests/heap.c +++ b/dlls/kernel32/tests/heap.c @@ -524,7 +524,6 @@ static void test_GlobalAlloc(void) ok( GetLastError() == ERROR_INVALID_HANDLE, "got error %lu\n", GetLastError() ); SetLastError( 0xdeadbeef ); ret = GlobalUnlock( mem ); - todo_wine ok( ret, "GlobalUnlock failed, error %lu\n", GetLastError() ); ok( GetLastError() == ERROR_INVALID_HANDLE, "got error %lu\n", GetLastError() ); #if 0 /* corrupts Wine heap */