Changeset 7360 for trunk/src/kernel32
- Timestamp:
- Nov 16, 2001, 3:52:56 PM (24 years ago)
- Location:
- trunk/src/kernel32
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/heap.cpp
r7358 r7360 19 19 #include "os2heap.h" 20 20 #include <heap.h> 21 #include "os2heap.h" 21 22 #include <odinwrap.h> 22 23 #include "initterm.h" … … 27 28 ODINDEBUGCHANNEL(KERNEL32-HEAP) 28 29 29 30 static HANDLE processheap = NULL; 31 OS2Heap *OS2ProcessHeap = NULL; 32 30 //****************************************************************************** 31 // Local variables 32 //****************************************************************************** 33 34 static OS2Heap *OS2ProcessHeap = NULL; 35 36 static HANDLE i_initializeProcessHeap() 37 { 38 HANDLE _processheap; 39 40 //SvL: Only one process heap per process 41 OS2ProcessHeap = new OS2Heap(HEAP_GENERATE_EXCEPTIONS, 0x4000, 0); 42 43 if(OS2ProcessHeap == NULL) 44 return(NULL); 45 _processheap = OS2ProcessHeap->getHeapHandle(); 46 47 return _processheap; 48 } 49 50 static HANDLE processheap = i_initializeProcessHeap(); 51 52 // This macro could be mapped to GetProcessHeap() if there 53 // is any change in functionality 54 #define GETPROCESSHEAP processheap 33 55 34 56 … … 46 68 else \ 47 69 curheap = OS2Heap::find(hHeap); \ 70 48 71 49 72 … … 202 225 { 203 226 // dprintf2(("KERNEL32: GetProcessHeap\n")); 204 //SvL: Only one process heap per process205 if(processheap == NULL) {206 OS2ProcessHeap = new OS2Heap(HEAP_GENERATE_EXCEPTIONS, 0x4000, 0);207 208 if(OS2ProcessHeap == NULL) {209 return(NULL);210 }211 processheap = OS2ProcessHeap->getHeapHandle();212 }213 227 return(processheap); 214 228 } … … 270 284 if((flags & GMEM_MOVEABLE)==0) /* POINTER */ 271 285 { 272 palloc=HeapAlloc(G etProcessHeap(), hpflags, size);286 palloc=HeapAlloc(GETPROCESSHEAP, hpflags, size); 273 287 return (HGLOBAL) palloc; 274 288 } … … 277 291 /* HeapLock(heap); */ 278 292 279 pintern=(PGLOBAL32_INTERN)HeapAlloc(G etProcessHeap(), 0, sizeof(GLOBAL32_INTERN));293 pintern=(PGLOBAL32_INTERN)HeapAlloc(GETPROCESSHEAP, 0, sizeof(GLOBAL32_INTERN)); 280 294 if (!pintern) return 0; 281 295 if(size) 282 296 { 283 297 //SvL: 2*sizeof for 8 byte alignment 284 if (!(palloc=HeapAlloc(G etProcessHeap(), hpflags, size+HGLOBAL_SIZE))) {285 HeapFree(G etProcessHeap(), 0, pintern);298 if (!(palloc=HeapAlloc(GETPROCESSHEAP, hpflags, size+HGLOBAL_SIZE))) { 299 HeapFree(GETPROCESSHEAP, 0, pintern); 286 300 return 0; 287 301 } … … 327 341 } 328 342 329 /* HeapLock(G etProcessHeap()); */343 /* HeapLock(GETPROCESSHEAP); */ 330 344 331 345 pintern=HANDLE_TO_INTERN(hmem); … … 342 356 SetLastError(ERROR_INVALID_HANDLE); 343 357 } 344 /* HeapUnlock(G etProcessHeap()); */;358 /* HeapUnlock(GETPROCESSHEAP); */; 345 359 346 360 dprintf(("KERNEL32: GlobalLock %x returned %x", hmem, palloc)); … … 372 386 } 373 387 374 /* HeapLock(G etProcessHeap()); */388 /* HeapLock(GETPROCESSHEAP); */ 375 389 pintern=HANDLE_TO_INTERN(hmem); 376 390 … … 389 403 locked=FALSE; 390 404 } 391 /* HeapUnlock(G etProcessHeap()); */405 /* HeapUnlock(GETPROCESSHEAP); */ 392 406 return locked; 393 407 } … … 422 436 /* will fail. */ 423 437 if (ISPOINTER(pmem)) { 424 if (HeapValidate( G etProcessHeap(), 0, pmem )) {438 if (HeapValidate( GETPROCESSHEAP, 0, pmem )) { 425 439 handle = (HGLOBAL)pmem; /* valid fixed block */ 426 440 return handle; … … 440 454 test = maybe_intern->Pointer; 441 455 //SvL: -2 for 8 byte alignment 442 if (HeapValidate( G etProcessHeap(), 0, ((HGLOBAL *)test)-2 ) && /* obj(-handle) valid arena? */443 HeapValidate( G etProcessHeap(), 0, maybe_intern )) /* intern valid arena? */456 if (HeapValidate( GETPROCESSHEAP, 0, ((HGLOBAL *)test)-2 ) && /* obj(-handle) valid arena? */ 457 HeapValidate( GETPROCESSHEAP, 0, maybe_intern )) /* intern valid arena? */ 444 458 { 445 459 return handle; … … 457 471 /* will fail. */ 458 472 if (ISPOINTER(pmem)) { 459 if (HeapValidate( G etProcessHeap(), 0, pmem )) {473 if (HeapValidate( GETPROCESSHEAP, 0, pmem )) { 460 474 handle = (HGLOBAL)pmem; /* valid fixed block */ 461 475 break; … … 469 483 if (maybe_intern->Magic == MAGIC_GLOBAL_USED) { 470 484 test = maybe_intern->Pointer; 471 if (HeapValidate( G etProcessHeap(), 0, ((HGLOBAL *)test)-1 ) && /* obj(-handle) valid arena? */472 HeapValidate( G etProcessHeap(), 0, maybe_intern )) /* intern valid arena? */485 if (HeapValidate( GETPROCESSHEAP, 0, ((HGLOBAL *)test)-1 ) && /* obj(-handle) valid arena? */ 486 HeapValidate( GETPROCESSHEAP, 0, maybe_intern )) /* intern valid arena? */ 473 487 break; /* valid moveable block */ 474 488 } … … 525 539 return 0; 526 540 } 527 size=HeapSize(G etProcessHeap(), 0, (LPVOID) hmem);541 size=HeapSize(GETPROCESSHEAP, 0, (LPVOID) hmem); 528 542 hnew=GlobalAlloc( flags, size); 529 543 palloc=GlobalLock(hnew); … … 550 564 { 551 565 /* reallocate fixed memory */ 552 hnew=(HGLOBAL)HeapReAlloc(G etProcessHeap(), heap_flags, (LPVOID) hmem, size);566 hnew=(HGLOBAL)HeapReAlloc(GETPROCESSHEAP, heap_flags, (LPVOID) hmem, size); 553 567 } 554 568 else … … 570 584 if(pintern->Pointer) 571 585 { 572 if((palloc = HeapReAlloc(G etProcessHeap(), heap_flags,586 if((palloc = HeapReAlloc(GETPROCESSHEAP, heap_flags, 573 587 (char *) pintern->Pointer-HGLOBAL_SIZE, 574 588 size+HGLOBAL_SIZE)) == NULL) … … 578 592 else 579 593 { 580 if((palloc=HeapAlloc(G etProcessHeap(), heap_flags, size+HGLOBAL_SIZE))594 if((palloc=HeapAlloc(GETPROCESSHEAP, heap_flags, size+HGLOBAL_SIZE)) 581 595 == NULL) 582 596 return 0; … … 589 603 if(pintern->Pointer) 590 604 { 591 HeapFree(G etProcessHeap(), 0, (char *) pintern->Pointer-HGLOBAL_SIZE);605 HeapFree(GETPROCESSHEAP, 0, (char *) pintern->Pointer-HGLOBAL_SIZE); 592 606 pintern->Pointer=NULL; 593 607 } … … 628 642 if(ISPOINTER(hmem)) /* POINTER */ 629 643 { 630 if(HeapFree(G etProcessHeap(), 0, (LPVOID) hmem) == TRUE)644 if(HeapFree(GETPROCESSHEAP, 0, (LPVOID) hmem) == TRUE) 631 645 hreturned = 0; // success 632 646 else … … 647 661 648 662 if(pintern->Pointer) 649 if(!HeapFree(G etProcessHeap(), 0, (char *)(pintern->Pointer)-HGLOBAL_SIZE))663 if(!HeapFree(GETPROCESSHEAP, 0, (char *)(pintern->Pointer)-HGLOBAL_SIZE)) 650 664 hreturned=hmem; 651 if(!HeapFree(G etProcessHeap(), 0, pintern))665 if(!HeapFree(GETPROCESSHEAP, 0, pintern)) 652 666 hreturned=hmem; 653 667 } … … 680 694 if(ISPOINTER(hmem)) 681 695 { 682 retval=HeapSize(G etProcessHeap(), 0, (LPVOID) hmem);696 retval=HeapSize(GETPROCESSHEAP, 0, (LPVOID) hmem); 683 697 } 684 698 else … … 691 705 if (!pintern->Pointer) /* handle case of GlobalAlloc( ??,0) */ 692 706 return 0; 693 retval=HeapSize(G etProcessHeap(), 0,707 retval=HeapSize(GETPROCESSHEAP, 0, 694 708 (char *)(pintern->Pointer)-HGLOBAL_SIZE)-HGLOBAL_SIZE; 695 709 //SvL: ??? … … 773 787 else 774 788 { 775 /* HeapLock(G etProcessHeap()); */789 /* HeapLock(GETPROCESSHEAP); */ 776 790 pintern=HANDLE_TO_INTERN(hmem); 777 791 if(pintern->Magic==MAGIC_GLOBAL_USED) … … 786 800 retval=0; 787 801 } 788 /* HeapUnlock(G etProcessHeap()); */802 /* HeapUnlock(GETPROCESSHEAP); */ 789 803 } 790 804 return retval; -
trunk/src/kernel32/os2heap.cpp
r7358 r7360 1 /* $Id: os2heap.cpp,v 1.3 0 2001-11-16 12:57:00phaller Exp $ */1 /* $Id: os2heap.cpp,v 1.31 2001-11-16 14:52:55 phaller Exp $ */ 2 2 3 3 /* … … 40 40 #endif 41 41 42 VMutex heaplistmutex; //protects linked lists of heaps43 44 42 void * _LNK_CONV getmoreHeapMem(Heap_t pHeap, size_t *size, int *clean); 45 43 void _LNK_CONV releaseHeapMem(Heap_t pHeap, void *block, size_t size); 46 44 45 VMutex heaplistmutex; //protects linked lists of heaps 46 47 47 48 48 //****************************************************************************** … … 60 60 OS2Heap *curheap = OS2Heap::heap; 61 61 62 #ifdef DEBUG 62 63 totalAlloc = 0; 64 #endif 63 65 fInitialized = 0; 64 66 nrHeaps = 0; … … 158 160 memset(lpMem, 0, dwBytes+HEAP_OVERHEAD); 159 161 } 162 163 #ifdef DEBUG 160 164 totalAlloc += dwBytes; 161 165 #endif 166 162 167 //align at 8 byte boundary 163 168 lpHeapObj = (HEAPELEM *)(((ULONG)lpMem+7) & ~7); … … 251 256 int size = Size(0, lpMem); 252 257 dprintf(("OS2Heap::Free lpMem = %X, size %d\n", lpMem, size)); 258 #ifdef DEBUG 253 259 totalAlloc -= size; 260 #endif 254 261 #endif 255 262 … … 272 279 dprintf(("OS2Heap::Validate, %X %X", dwFlags, lpMem)); 273 280 274 if(lpMem == NULL) {275 dprintf(("OS2Heap::Validate lpMem == NULL\n"));276 return(FALSE);277 }278 281 /* verify lpMem address */ 279 282 if (lpMem >= (LPVOID)ulMaxAddr || lpMem < (LPVOID)0x10000) … … 341 344 OS2Heap *OS2Heap::heap = NULL; 342 345 346 343 347 //****************************************************************************** 344 348 //****************************************************************************** … … 353 357 //NOTE: MUST use 64kb here or else we are at risk of running out of virtual 354 358 // memory space. (when allocating 4kb we actually get 4kb + 60k uncommited) 355 *size = ( *size / 65536) * 65536 +65536;359 *size = ( (*size / 65536) + 1) * 65536; 356 360 357 361 rc = DosAllocMem(&newblock, *size, PAG_READ|PAG_WRITE|PAG_COMMIT|PAG_EXECUTE); -
trunk/src/kernel32/os2heap.h
r7091 r7360 1 /* $Id: os2heap.h,v 1. 9 2001-10-17 13:38:50phaller Exp $ */1 /* $Id: os2heap.h,v 1.10 2001-11-16 14:52:56 phaller Exp $ */ 2 2 3 3 /* … … 51 51 protected: 52 52 53 DWORD dwMaximumSize, dwInitialSize, flOptions, totalAlloc, nrHeaps; 53 DWORD dwMaximumSize, dwInitialSize, flOptions, nrHeaps; 54 #ifdef DEBUG 55 DWORD totalAlloc; 56 #endif 54 57 HANDLE hPrimaryHeap; 55 58 BOOL fInitialized;
Note:
See TracChangeset
for help on using the changeset viewer.