diff --git a/reactos/dll/win32/kernel32/mem/global.c b/reactos/dll/win32/kernel32/mem/global.c index 46432f59d37..da213ab9e70 100644 --- a/reactos/dll/win32/kernel32/mem/global.c +++ b/reactos/dll/win32/kernel32/mem/global.c @@ -213,13 +213,15 @@ HGLOBAL STDCALL GlobalFree(HGLOBAL hMem) { PGLOBAL_HANDLE phandle; + HGLOBAL hreturned; DPRINT("GlobalFree( 0x%lX )\n", (ULONG)hMem); + hreturned = 0; if (ISPOINTER(hMem)) /* POINTER */ { - RtlFreeHeap(GetProcessHeap(), 0, (PVOID)hMem); - hMem = 0; + if(!RtlFreeHeap(GetProcessHeap(), 0, (PVOID)hMem)) + hMem = 0; } else /* HANDLE */ { @@ -229,7 +231,8 @@ GlobalFree(HGLOBAL hMem) if(MAGIC_GLOBAL_USED == phandle->Magic) { - + /* WIN98 does not make this test. That is you can free a */ + /* block you have not unlocked. Go figure!! */ if(phandle->LockCount!=0) { DPRINT1("Warning! GlobalFree(0x%X) Freeing a handle to a locked object.\n", hMem); @@ -237,15 +240,17 @@ GlobalFree(HGLOBAL hMem) } if(phandle->Pointer) - RtlFreeHeap(GetProcessHeap(), 0, (PVOID)((ULONG_PTR)phandle->Pointer - HANDLE_SIZE)); + if (!RtlFreeHeap(GetProcessHeap(), 0, (PVOID)((ULONG_PTR)phandle->Pointer - HANDLE_SIZE))) + hreturned = hMem; - RtlFreeHeap(GetProcessHeap(), 0, phandle); + if (!RtlFreeHeap(GetProcessHeap(), 0, phandle)) + hreturned = hMem; } HeapUnlock(GetProcessHeap()); hMem = 0; } - return hMem; + return hreturned; } diff --git a/reactos/dll/win32/kernel32/mem/heap.c b/reactos/dll/win32/kernel32/mem/heap.c index 9fb0afd9321..da748de624b 100644 --- a/reactos/dll/win32/kernel32/mem/heap.c +++ b/reactos/dll/win32/kernel32/mem/heap.c @@ -40,9 +40,15 @@ */ HANDLE STDCALL HeapCreate(DWORD flags, DWORD dwInitialSize, DWORD dwMaximumSize) { - + HANDLE hRet; DPRINT("HeapCreate( 0x%lX, 0x%lX, 0x%lX )\n", flags, dwInitialSize, dwMaximumSize); - return(RtlCreateHeap(flags, NULL, dwMaximumSize, dwInitialSize, NULL, NULL)); + + hRet = RtlCreateHeap(flags, NULL, dwMaximumSize, dwInitialSize, NULL, NULL); + + if (!hRet) + SetLastError(ERROR_NOT_ENOUGH_MEMORY); + + return hRet; } /*********************************************************************