Lines Matching defs:pHeap

119     PRTHEAPPAGE         pHeap;
198 * @param pHeap The page heap to initialize.
202 int RTHeapPageInit(PRTHEAPPAGE pHeap, bool fExec)
204 int rc = RTCritSectInitEx(&pHeap->CritSect,
209 pHeap->cHeapPages = 0;
210 pHeap->cFreePages = 0;
211 pHeap->cAllocCalls = 0;
212 pHeap->cFreeCalls = 0;
213 pHeap->uLastMinimizeCall = 0;
214 pHeap->BlockTree = NULL;
215 pHeap->fExec = fExec;
216 pHeap->u32Magic = RTHEAPPAGE_MAGIC;
226 * @param pHeap The page heap to delete.
228 int RTHeapPageDelete(PRTHEAPPAGE pHeap)
230 NOREF(pHeap);
247 PRTHEAPPAGE pHeap = pBlock->pHeap;
251 pHeap->cFreePages -= cPages;
252 if (!pHeap->pHint2 || pHeap->pHint2->cFreePages < pBlock->cFreePages)
253 pHeap->pHint2 = pBlock;
254 pHeap->cAllocCalls++;
351 * @param pHeap The heap - locked.
358 static int rtHeapPageAllocLocked(PRTHEAPPAGE pHeap, size_t cPages, const char *pszTag, bool fZero, void **ppv)
366 if (pHeap->pHint1)
368 rc = rtHeapPageAllocFromBlock(pHeap->pHint1, cPages, fZero, ppv);
372 if (pHeap->pHint2)
374 rc = rtHeapPageAllocFromBlock(pHeap->pHint2, cPages, fZero, ppv);
385 if (pHeap->cFreePages >= cPages)
391 RTAvlrPVDoWithAll(&pHeap->BlockTree, true /*fFromLeft*/, rtHeapPageAllocCallback, &Args);
402 RTCritSectLeave(&pHeap->CritSect);
405 PROT_READ | PROT_WRITE | (pHeap->fExec ? PROT_EXEC : 0),
410 RTCritSectEnter(&pHeap->CritSect);
425 RTCritSectEnter(&pHeap->CritSect);
433 pBlock->pHeap = pHeap;
435 RTCritSectEnter(&pHeap->CritSect);
437 bool fRc = RTAvlrPVInsert(&pHeap->BlockTree, &pBlock->Core); Assert(fRc); NOREF(fRc);
438 pHeap->cFreePages += RTMEMPAGEPOSIX_BLOCK_PAGE_COUNT;
439 pHeap->cHeapPages += RTMEMPAGEPOSIX_BLOCK_PAGE_COUNT;
455 * @param pHeap The page heap.
461 int RTHeapPageAlloc(PRTHEAPPAGE pHeap, size_t cPages, const char *pszTag, bool fZero, void **ppv)
468 AssertPtrReturn(pHeap, VERR_INVALID_HANDLE);
469 AssertReturn(pHeap->u32Magic == RTHEAPPAGE_MAGIC, VERR_INVALID_HANDLE);
475 int rc = RTCritSectEnter(&pHeap->CritSect);
478 rc = rtHeapPageAllocLocked(pHeap, cPages, pszTag, fZero, ppv);
479 RTCritSectLeave(&pHeap->CritSect);
510 * @param pHeap The page heap.
514 int RTHeapPageFree(PRTHEAPPAGE pHeap, void *pv, size_t cPages)
521 AssertPtrReturn(pHeap, VERR_INVALID_HANDLE);
522 AssertReturn(pHeap->u32Magic == RTHEAPPAGE_MAGIC, VERR_INVALID_HANDLE);
527 int rc = RTCritSectEnter(&pHeap->CritSect);
530 PRTHEAPPAGEBLOCK pBlock = (PRTHEAPPAGEBLOCK)RTAvlrPVRangeGet(&pHeap->BlockTree, pv);
558 pHeap->cFreePages += cPages;
559 pHeap->cFreeCalls++;
560 if (!pHeap->pHint1 || pHeap->pHint1->cFreePages < pBlock->cFreePages)
561 pHeap->pHint1 = pBlock;
566 if ( pHeap->cFreePages >= RTMEMPAGEPOSIX_BLOCK_PAGE_COUNT * 3
567 && pHeap->cFreePages >= pHeap->cHeapPages / 2 /* 50% free */
568 && pHeap->cFreeCalls - pHeap->uLastMinimizeCall > RTMEMPAGEPOSIX_BLOCK_PAGE_COUNT
571 uint32_t cFreePageTarget = pHeap->cHeapPages / 4; /* 25% free */
572 while (pHeap->cFreePages > cFreePageTarget)
574 pHeap->uLastMinimizeCall = pHeap->cFreeCalls;
577 RTAvlrPVDoWithAll(&pHeap->BlockTree, false /*fFromLeft*/,
582 void *pv2 = RTAvlrPVRemove(&pHeap->BlockTree, pBlock->Core.Key); Assert(pv2); NOREF(pv2);
583 pHeap->cHeapPages -= RTMEMPAGEPOSIX_BLOCK_PAGE_COUNT;
584 pHeap->cFreePages -= RTMEMPAGEPOSIX_BLOCK_PAGE_COUNT;
585 pHeap->pHint1 = NULL;
586 pHeap->pHint2 = NULL;
587 RTCritSectLeave(&pHeap->CritSect);
599 RTCritSectEnter(&pHeap->CritSect);
609 RTCritSectLeave(&pHeap->CritSect);
644 * @param pHeap The heap to use.
646 static void *rtMemPagePosixAlloc(size_t cb, const char *pszTag, bool fZero, PRTHEAPPAGE pHeap)
663 PROT_READ | PROT_WRITE | (pHeap == &g_MemExecPosixHeap ? PROT_EXEC : 0),
679 rc = RTHeapPageAlloc(pHeap, cb >> PAGE_SHIFT, pszTag, fZero, &pv);
693 * @param pHeap The heap.
695 static void rtMemPagePosixFree(void *pv, size_t cb, PRTHEAPPAGE pHeap)
717 int rc = RTHeapPageFree(pHeap, pv, cb >> PAGE_SHIFT);