- 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,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;
}

View file

@ -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;
}
/*********************************************************************