- Timestamp:
- Jul 17, 2001, 2:10:22 PM (24 years ago)
- Location:
- trunk/src/kernel32
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/heap.cpp
r6240 r6354 1 /* $Id: heap.cpp,v 1.3 1 2001-07-08 07:14:45sandervl Exp $ */1 /* $Id: heap.cpp,v 1.32 2001-07-17 12:10:21 sandervl Exp $ */ 2 2 3 3 /* … … 139 139 ODINFUNCTIONNODBG3(BOOL, HeapValidate, HANDLE, hHeap, DWORD, dwFlags, LPCVOID, lpMem) 140 140 { 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); 143 148 } 144 149 //****************************************************************************** … … 289 294 290 295 296 if(hmem == NULL || ISPOINTER(hmem)) { 297 dprintf(("KERNEL32: GlobalLock %x returned %x", hmem, hmem)); 298 return (LPVOID) hmem; 299 } 300 291 301 /* verify lpMem address */ 292 302 if (hmem >= (HGLOBAL)ulMaxAddr || hmem < (HGLOBAL)0x10000) … … 295 305 DebugInt3(); 296 306 return 0; 297 }298 299 if(hmem == NULL || ISPOINTER(hmem)) {300 dprintf(("KERNEL32: GlobalLock %x returned %x", hmem, hmem));301 return (LPVOID) hmem;302 307 } 303 308 … … 338 343 dprintf(("KERNEL32: GlobalUnlock %x", hmem)); 339 344 345 if(hmem == NULL || ISPOINTER(hmem)) 346 return FALSE; 347 340 348 /* verify lpMem address */ 341 349 if (hmem >= (HGLOBAL)ulMaxAddr || hmem < (HGLOBAL)0x10000) … … 345 353 return 0; 346 354 } 347 348 if(hmem == NULL || ISPOINTER(hmem))349 return FALSE;350 355 351 356 /* HeapLock(GetProcessHeap()); */ … … 481 486 PGLOBAL32_INTERN pintern; 482 487 DWORD heap_flags = (flags & GMEM_ZEROINIT) ? HEAP_ZERO_MEMORY : 0; 488 489 #ifdef __WIN32OS2__ 490 hmem = GlobalHandle((LPCVOID)hmem); 491 #endif 483 492 484 493 hnew = 0; -
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 //****************************************************************************** -
trunk/src/kernel32/os2heap.h
r6184 r6354 1 /* $Id: os2heap.h,v 1. 5 2001-07-06 13:47:19sandervl Exp $ */1 /* $Id: os2heap.h,v 1.6 2001-07-17 12:10:22 sandervl Exp $ */ 2 2 3 3 /* … … 16 16 17 17 #include "vmutex.h" 18 #include <umalloc.h> 18 19 19 20 #define MAGIC_NR_HEAP 0x87654321 … … 61 62 HEAPELEM *heapelem; 62 63 64 char *pInitialHeapMem; 65 Heap_t uheap; 66 63 67 OS2Heap *next; 64 68 static OS2Heap *heap;
Note:
See TracChangeset
for help on using the changeset viewer.