Changeset 6354 for trunk/src


Ignore:
Timestamp:
Jul 17, 2001, 2:10:22 PM (24 years ago)
Author:
sandervl
Message:

heap changes/fixes

Location:
trunk/src/kernel32
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/heap.cpp

    r6240 r6354  
    1 /* $Id: heap.cpp,v 1.31 2001-07-08 07:14:45 sandervl Exp $ */
     1/* $Id: heap.cpp,v 1.32 2001-07-17 12:10:21 sandervl Exp $ */
    22
    33/*
     
    139139ODINFUNCTIONNODBG3(BOOL, HeapValidate, HANDLE, hHeap, DWORD, dwFlags, LPCVOID, lpMem)
    140140{
    141   dprintf(("KERNEL32:  HeapValidate - stub\n"));
    142   return(TRUE);
     141 OS2Heap *curheap = OS2Heap::find(hHeap);
     142
     143  dprintf2(("KERNEL32: HeapValidate %x %x %x", hHeap, dwFlags, lpMem));
     144  if(curheap == NULL)
     145        return FALSE;
     146
     147  return curheap->Validate(dwFlags, lpMem);
    143148}
    144149//******************************************************************************
     
    289294
    290295
     296   if(hmem == NULL || ISPOINTER(hmem)) {
     297      dprintf(("KERNEL32: GlobalLock %x returned %x", hmem, hmem));
     298      return (LPVOID) hmem;
     299   }
     300
    291301   /* verify lpMem address */
    292302   if (hmem >= (HGLOBAL)ulMaxAddr || hmem < (HGLOBAL)0x10000)
     
    295305        DebugInt3();
    296306        return 0;
    297    }
    298 
    299    if(hmem == NULL || ISPOINTER(hmem)) {
    300       dprintf(("KERNEL32: GlobalLock %x returned %x", hmem, hmem));
    301       return (LPVOID) hmem;
    302307   }
    303308
     
    338343   dprintf(("KERNEL32: GlobalUnlock %x", hmem));
    339344
     345   if(hmem == NULL || ISPOINTER(hmem))
     346      return FALSE;
     347
    340348   /* verify lpMem address */
    341349   if (hmem >= (HGLOBAL)ulMaxAddr || hmem < (HGLOBAL)0x10000)
     
    345353        return 0;
    346354   }
    347 
    348    if(hmem == NULL || ISPOINTER(hmem))
    349       return FALSE;
    350355
    351356   /* HeapLock(GetProcessHeap()); */
     
    481486   PGLOBAL32_INTERN     pintern;
    482487   DWORD heap_flags = (flags & GMEM_ZEROINIT) ? HEAP_ZERO_MEMORY : 0;
     488
     489#ifdef __WIN32OS2__
     490   hmem = GlobalHandle((LPCVOID)hmem);
     491#endif
    483492
    484493   hnew = 0;
  • trunk/src/kernel32/os2heap.cpp

    r6184 r6354  
    1 /* $Id: os2heap.cpp,v 1.19 2001-07-06 13:47:19 sandervl Exp $ */
     1/* $Id: os2heap.cpp,v 1.20 2001-07-17 12:10:21 sandervl Exp $ */
    22
    33/*
     
    2020#include <stdlib.h>
    2121#include <string.h>
     22#include <umalloc.h>
    2223
    2324#include "win32type.h"
     
    4142VMutex heaplistmutex;   //protects linked lists of heaps
    4243
     44void * _LNK_CONV getmoreHeapMem(Heap_t pHeap, size_t *size, int *clean);
     45void _LNK_CONV   releaseHeapMem(Heap_t pHeap, void *block, size_t size);
     46
    4347//******************************************************************************
    4448//******************************************************************************
     
    5458
    5559  this->dwMaximumSize = dwMaximumSize;
    56   this->dwInitialSize = dwInitialSize;
     60  this->dwInitialSize = (dwInitialSize) ? dwInitialSize : 0x4000;
    5761  this->flOptions     = flOptions;
    5862
     
    7781
    7882  heaplistmutex.leave();
     83
     84  APIRET rc;
     85
     86  rc = DosAllocMem((PPVOID)&pInitialHeapMem, dwInitialSize, PAG_READ|PAG_WRITE|PAG_COMMIT);
     87  if(rc != 0) {
     88        dprintf(("OS2Heap::OS2Heap: DosAllocSharedMem failed with %d", rc));
     89        DebugInt3();
     90  }
     91  uheap = _ucreate(pInitialHeapMem, dwInitialSize, _BLOCK_CLEAN,
     92                   _HEAP_REGULAR, getmoreHeapMem, releaseHeapMem);
     93  if(uheap == NULL) {
     94        DosFreeMem(pInitialHeapMem);
     95        pInitialHeapMem = NULL;
     96        dprintf(("OS2Heap::OS2Heap: _ucreate failed!"));
     97        DebugInt3();
     98  }
    7999}
    80100//******************************************************************************
     
    116136  }
    117137  heaplistmutex.leave();
     138
     139  if(uheap) {
     140        _uclose(uheap);
     141        _udestroy(uheap, _FORCE);
     142        uheap = NULL;
     143  }
     144  if(pInitialHeapMem) {
     145        DosFreeMem(pInitialHeapMem);
     146        pInitialHeapMem = NULL;
     147  }
     148
    118149  dprintf(("dtr OS2Heap, hPrimaryHeap = %X done\n", hPrimaryHeap));
    119150}
     
    126157
    127158//  dprintf(("OS2Heap::Alloc\n"));
    128   lpMem = malloc(dwBytes + HEAP_OVERHEAD);
     159  lpMem = _umalloc(uheap, dwBytes + HEAP_OVERHEAD);
    129160  if(lpMem == NULL) {
    130161      dprintf(("OS2Heap::Alloc, lpMem == NULL"));
     
    274305BOOL OS2Heap::Validate(DWORD dwFlags, LPCVOID lpMem)
    275306{
    276   dprintf(("OS2Heap::Validate, %X %X - stub? (TRUE)\n", dwFlags, lpMem));
     307  HEAPELEM *helem = GET_HEAPOBJ(lpMem);
     308
     309  dprintf(("OS2Heap::Validate, %X %X", dwFlags, lpMem));
     310
     311  if(lpMem == NULL) {
     312        dprintf(("OS2Heap::Validate lpMem == NULL\n"));
     313        return(FALSE);
     314  }
     315  /* verify lpMem address */
     316  if (lpMem >= (LPVOID)ulMaxAddr || lpMem < (LPVOID)0x10000)
     317  {
     318        dprintf(("OS2Heap::Validate BAD HEAP POINTER:%X\n", lpMem));
     319        return FALSE;
     320  }
     321
     322  if(helem->magic != MAGIC_NR_HEAP)
     323  {
     324        dprintf(("OS2Heap::Validate BAD HEAP POINTER:%X\n", lpMem));
     325        return FALSE;
     326  }
    277327  return(TRUE);
    278328}
     
    307357//******************************************************************************
    308358OS2Heap *OS2Heap::heap = NULL;
     359
     360//******************************************************************************
     361//******************************************************************************
     362void * _LNK_CONV getmoreHeapMem(Heap_t pHeap, size_t *size, int *clean)
     363{
     364 APIRET rc;
     365 PVOID newblock;
     366
     367  dprintf(("KERNEL32: getmoreHeapMem(%08xh, %08xh, %08xh)", pHeap, *size, *clean));
     368
     369  /* round the size up to a multiple of 4K */
     370  *size = (*size / 4096) * 4096 + 4096;
     371
     372  rc = DosAllocMem(&newblock, *size, PAG_READ|PAG_WRITE|PAG_COMMIT|PAG_EXECUTE);
     373  if(rc != 0) {
     374        dprintf(("getmoreHeapMem: DosAllocMem failed with %d", rc));
     375        return FALSE;
     376  }
     377  *clean = _BLOCK_CLEAN;
     378  dprintf(("KERNEL32: getmoreHeapMem %x %d", newblock, *size));
     379  return newblock;
     380}
     381//******************************************************************************
     382//******************************************************************************
     383void _LNK_CONV releaseHeapMem(Heap_t pHeap, void *block, size_t size)
     384{
     385  dprintf(("KERNEL32: releaseHeapMem %x %x %d", pHeap, block, size));
     386  DosFreeMem(block);
     387}
     388//******************************************************************************
     389//******************************************************************************
  • trunk/src/kernel32/os2heap.h

    r6184 r6354  
    1 /* $Id: os2heap.h,v 1.5 2001-07-06 13:47:19 sandervl Exp $ */
     1/* $Id: os2heap.h,v 1.6 2001-07-17 12:10:22 sandervl Exp $ */
    22
    33/*
     
    1616
    1717#include "vmutex.h"
     18#include <umalloc.h>
    1819
    1920#define MAGIC_NR_HEAP  0x87654321
     
    6162    HEAPELEM *heapelem;
    6263
     64    char     *pInitialHeapMem;
     65    Heap_t    uheap;
     66
    6367          OS2Heap *next;
    6468   static OS2Heap *heap;
Note: See TracChangeset for help on using the changeset viewer.