Changeset 6354 for trunk/src/kernel32/os2heap.cpp
- Timestamp:
- Jul 17, 2001, 2:10:22 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/os2heap.cpp
r6184 r6354 1 /* $Id: os2heap.cpp,v 1. 19 2001-07-06 13:47:19sandervl Exp $ */1 /* $Id: os2heap.cpp,v 1.20 2001-07-17 12:10:21 sandervl Exp $ */ 2 2 3 3 /* … … 20 20 #include <stdlib.h> 21 21 #include <string.h> 22 #include <umalloc.h> 22 23 23 24 #include "win32type.h" … … 41 42 VMutex heaplistmutex; //protects linked lists of heaps 42 43 44 void * _LNK_CONV getmoreHeapMem(Heap_t pHeap, size_t *size, int *clean); 45 void _LNK_CONV releaseHeapMem(Heap_t pHeap, void *block, size_t size); 46 43 47 //****************************************************************************** 44 48 //****************************************************************************** … … 54 58 55 59 this->dwMaximumSize = dwMaximumSize; 56 this->dwInitialSize = dwInitialSize;60 this->dwInitialSize = (dwInitialSize) ? dwInitialSize : 0x4000; 57 61 this->flOptions = flOptions; 58 62 … … 77 81 78 82 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 } 79 99 } 80 100 //****************************************************************************** … … 116 136 } 117 137 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 118 149 dprintf(("dtr OS2Heap, hPrimaryHeap = %X done\n", hPrimaryHeap)); 119 150 } … … 126 157 127 158 // dprintf(("OS2Heap::Alloc\n")); 128 lpMem = malloc(dwBytes + HEAP_OVERHEAD);159 lpMem = _umalloc(uheap, dwBytes + HEAP_OVERHEAD); 129 160 if(lpMem == NULL) { 130 161 dprintf(("OS2Heap::Alloc, lpMem == NULL")); … … 274 305 BOOL OS2Heap::Validate(DWORD dwFlags, LPCVOID lpMem) 275 306 { 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 } 277 327 return(TRUE); 278 328 } … … 307 357 //****************************************************************************** 308 358 OS2Heap *OS2Heap::heap = NULL; 359 360 //****************************************************************************** 361 //****************************************************************************** 362 void * _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 //****************************************************************************** 383 void _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 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.