Changeset 8877 for trunk/src/kernel32/heapcode.cpp
- Timestamp:
- Jul 15, 2002, 4:28:53 PM (23 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/heapcode.cpp
r5075 r8877 1 /* $Id: heapcode.cpp,v 1. 3 2001-02-09 18:31:05sandervl Exp $ */1 /* $Id: heapcode.cpp,v 1.4 2002-07-15 14:28:51 sandervl Exp $ */ 2 2 /* 3 3 * Code heap functions for OS/2 4 4 * 5 5 * Initially commit 4 kb, add more when required 6 * 7 * NOTE: If high memory is ever used for this heap, then you must use VirtualAlloc! 6 8 * 7 9 * TODO: Not process/thread safe (initializing/destroying heap) … … 22 24 #include "dbglocal.h" 23 25 24 Heap_t codeHeap = 0;25 static PVOID pCodeMem = NULL;26 Heap_t codeHeap = 0; 27 static PVOID pCodeMem = NULL; 26 28 27 29 void * _LNK_CONV getmoreCodeMem(Heap_t pHeap, size_t *size, int *clean); 28 void _LNK_CONV releaseCodeMem(Heap_t pHeap, void *block, size_t size);30 void _LNK_CONV releaseCodeMem(Heap_t pHeap, void *block, size_t size); 29 31 30 32 //****************************************************************************** … … 32 34 BOOL InitializeCodeHeap() 33 35 { 34 APIRET rc;36 APIRET rc; 35 37 36 dprintf(("KERNEL32: InitializeCodeHeap")); 37 rc = DosAllocMem(&pCodeMem, PAGE_SIZE, PAG_READ|PAG_WRITE|PAG_COMMIT|PAG_EXECUTE); 38 if(rc != 0) { 39 dprintf(("InitializeSharedHeap: DosAllocSharedMem failed with %d", rc)); 40 return FALSE; 41 } 42 codeHeap = _ucreate(pCodeMem, PAGE_SIZE, _BLOCK_CLEAN, 43 _HEAP_REGULAR, getmoreCodeMem, releaseCodeMem); 44 if(codeHeap == NULL) { 45 DosFreeMem(pCodeMem); 38 dprintf(("KERNEL32: InitializeCodeHeap")); 39 40 //NOTE: MUST use 64kb here or else we are at risk of running out of virtual 41 // memory space. (when allocating 4kb we actually get 4kb + 60k uncommited) 42 rc = DosAllocMem(&pCodeMem, 64*1024, PAG_READ|PAG_WRITE|PAG_COMMIT|PAG_EXECUTE); 43 if(rc != 0) { 44 dprintf(("InitializeSharedHeap: DosAllocSharedMem failed with %d", rc)); 45 return FALSE; 46 } 47 codeHeap = _ucreate(pCodeMem, PAGE_SIZE, _BLOCK_CLEAN, _HEAP_REGULAR, getmoreCodeMem, releaseCodeMem); 48 if(codeHeap == NULL) { 49 DosFreeMem(pCodeMem); 46 50 pCodeMem = NULL; 47 dprintf(("InitializeSharedHeap: _ucreate failed!"));48 return FALSE;49 }50 return TRUE;51 dprintf(("InitializeSharedHeap: _ucreate failed!")); 52 return FALSE; 53 } 54 return TRUE; 51 55 } 52 56 //****************************************************************************** … … 54 58 void DestroyCodeHeap() 55 59 { 56 dprintf(("KERNEL32: DestroyCodeHeap"));57 if(codeHeap) {58 _uclose(codeHeap);59 _udestroy(codeHeap, _FORCE);60 codeHeap = NULL;61 }62 if(pCodeMem) {63 DosFreeMem(pCodeMem);64 pCodeMem = NULL;65 }60 dprintf(("KERNEL32: DestroyCodeHeap")); 61 if(codeHeap) { 62 _uclose(codeHeap); 63 _udestroy(codeHeap, _FORCE); 64 codeHeap = NULL; 65 } 66 if(pCodeMem) { 67 DosFreeMem(pCodeMem); 68 pCodeMem = NULL; 69 } 66 70 } 67 71 //****************************************************************************** … … 69 73 void * _LNK_CONV getmoreCodeMem(Heap_t pHeap, size_t *size, int *clean) 70 74 { 71 APIRET rc;72 PVOID newblock;75 APIRET rc; 76 PVOID newblock; 73 77 74 dprintf(("KERNEL32: getmoreCodeMem(%08xh, %08xh, %08xh)\n", 75 pHeap, 76 *size, 77 *clean)); 78 dprintf(("KERNEL32: getmoreCodeMem(%08xh, %08xh, %08xh)\n", pHeap, *size, *clean)); 78 79 79 /* round the size up to a multiple of 4K */ 80 *size = (*size / 4096) * 4096 + 4096; 80 /* round the size up to a multiple of 64K */ 81 //NOTE: MUST use 64kb here or else we are at risk of running out of virtual 82 // memory space. (when allocating 4kb we actually get 4kb + 60k uncommited) 83 *size = ( (*size / 65536) + 1) * 65536; 81 84 82 rc = DosAllocMem(&newblock, *size, PAG_READ|PAG_WRITE|PAG_COMMIT|PAG_EXECUTE);83 if(rc != 0) {84 dprintf(("getmoreCodeMem: DosAllocMem failed with %d", rc));85 return FALSE;86 }87 *clean = _BLOCK_CLEAN;88 dprintf(("KERNEL32: getmoreCodeMem %x %d", newblock, *size));89 return newblock;85 rc = DosAllocMem(&newblock, *size, PAG_READ|PAG_WRITE|PAG_COMMIT|PAG_EXECUTE); 86 if(rc != 0) { 87 dprintf(("getmoreCodeMem: DosAllocMem failed with %d", rc)); 88 return FALSE; 89 } 90 *clean = _BLOCK_CLEAN; 91 dprintf(("KERNEL32: getmoreCodeMem %x %d", newblock, *size)); 92 return newblock; 90 93 } 91 94 //****************************************************************************** … … 93 96 void _LNK_CONV releaseCodeMem(Heap_t pHeap, void *block, size_t size) 94 97 { 95 dprintf(("KERNEL32: releaseCodeMem %x %d", block, size));96 DosFreeMem(block);98 dprintf(("KERNEL32: releaseCodeMem %x %d", block, size)); 99 DosFreeMem(block); 97 100 } 98 101 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.