- Slightly update heap-related routines to wine's routines. Doesn't fix regression tests really, but just in case.

svn path=/trunk/; revision=21955
This commit is contained in:
Aleksey Bragin 2006-05-20 20:42:26 +00:00
parent 0159a46c3c
commit 6e418a0fd9
2 changed files with 19 additions and 8 deletions

View file

@ -213,12 +213,14 @@ HGLOBAL STDCALL
GlobalFree(HGLOBAL hMem) GlobalFree(HGLOBAL hMem)
{ {
PGLOBAL_HANDLE phandle; PGLOBAL_HANDLE phandle;
HGLOBAL hreturned;
DPRINT("GlobalFree( 0x%lX )\n", (ULONG)hMem); DPRINT("GlobalFree( 0x%lX )\n", (ULONG)hMem);
hreturned = 0;
if (ISPOINTER(hMem)) /* POINTER */ if (ISPOINTER(hMem)) /* POINTER */
{ {
RtlFreeHeap(GetProcessHeap(), 0, (PVOID)hMem); if(!RtlFreeHeap(GetProcessHeap(), 0, (PVOID)hMem))
hMem = 0; hMem = 0;
} }
else /* HANDLE */ else /* HANDLE */
@ -229,7 +231,8 @@ GlobalFree(HGLOBAL hMem)
if(MAGIC_GLOBAL_USED == phandle->Magic) 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) if(phandle->LockCount!=0)
{ {
DPRINT1("Warning! GlobalFree(0x%X) Freeing a handle to a locked object.\n", hMem); DPRINT1("Warning! GlobalFree(0x%X) Freeing a handle to a locked object.\n", hMem);
@ -237,15 +240,17 @@ GlobalFree(HGLOBAL hMem)
} }
if(phandle->Pointer) 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()); HeapUnlock(GetProcessHeap());
hMem = 0; hMem = 0;
} }
return hMem; return hreturned;
} }

View file

@ -40,9 +40,15 @@
*/ */
HANDLE STDCALL HeapCreate(DWORD flags, DWORD dwInitialSize, DWORD dwMaximumSize) HANDLE STDCALL HeapCreate(DWORD flags, DWORD dwInitialSize, DWORD dwMaximumSize)
{ {
HANDLE hRet;
DPRINT("HeapCreate( 0x%lX, 0x%lX, 0x%lX )\n", flags, dwInitialSize, dwMaximumSize); 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;
} }
/********************************************************************* /*********************************************************************