Lines Matching defs:pFree

400     PMMHYPERCHUNKFREE pFree = (PMMHYPERCHUNKFREE)((char *)pHeap->CTX_SUFF(pbHeap) + pHeap->offFreeHead);
401 while (pFree)
403 ASSERT_CHUNK_FREE(pHeap, pFree);
404 if (pFree->cb >= cb)
406 unsigned offAlign = (uintptr_t)(&pFree->core + 1) & (uAlignment - 1);
409 if (!offAlign || pFree->cb - offAlign >= cb)
411 Log3(("mmHyperAllocChunk: Using pFree=%p pFree->cb=%d offAlign=%d\n", pFree, pFree->cb, offAlign));
419 MMHYPERCHUNKFREE Free = *pFree;
420 if (MMHYPERCHUNK_GET_OFFPREV(&pFree->core))
423 PMMHYPERCHUNKFREE pPrev = (PMMHYPERCHUNKFREE)((char *)pFree + MMHYPERCHUNK_GET_OFFPREV(&Free.core));
432 Assert(pPrev == &pFree->core);
442 /* Recreate pFree node and adjusting everything... */
443 pFree = (PMMHYPERCHUNKFREE)((char *)pFree + offAlign);
444 *pFree = Free;
446 pFree->cb -= offAlign;
447 if (pFree->core.offNext)
449 pFree->core.offNext -= offAlign;
450 PMMHYPERCHUNK pNext = (PMMHYPERCHUNK)((char *)pFree + pFree->core.offNext);
451 MMHYPERCHUNK_SET_OFFPREV(pNext, -(int32_t)pFree->core.offNext);
454 if (MMHYPERCHUNK_GET_OFFPREV(&pFree->core))
455 MMHYPERCHUNK_SET_OFFPREV(&pFree->core, MMHYPERCHUNK_GET_OFFPREV(&pFree->core) - offAlign);
457 if (pFree->offNext)
459 pFree->offNext -= offAlign;
460 PMMHYPERCHUNKFREE pNext = (PMMHYPERCHUNKFREE)((char *)pFree + pFree->offNext);
461 pNext->offPrev = -(int32_t)pFree->offNext;
466 if (pFree->offPrev)
468 pFree->offPrev -= offAlign;
469 PMMHYPERCHUNKFREE pPrev = (PMMHYPERCHUNKFREE)((char *)pFree + pFree->offPrev);
470 pPrev->offNext = -pFree->offPrev;
475 pFree->core.offHeap = (uintptr_t)pHeap - (uintptr_t)pFree;
476 pFree->core.offStat = 0;
477 ASSERT_CHUNK_FREE(pHeap, pFree);
478 Log3(("mmHyperAllocChunk: Realigned pFree=%p\n", pFree));
484 if (pFree->cb >= cb + RT_ALIGN(sizeof(MMHYPERCHUNKFREE), MMHYPER_HEAP_ALIGN_MIN))
490 PMMHYPERCHUNKFREE pNew = (PMMHYPERCHUNKFREE)((char *)&pFree->core + off);
491 *pNew = *pFree;
528 pFree->core.offNext = off;
529 MMHYPERCHUNK_SET_TYPE(&pFree->core, MMHYPERCHUNK_FLAGS_USED);
535 pRet = &pFree->core;
536 ASSERT_CHUNK(pHeap, &pFree->core);
544 if (pFree->offNext)
546 PMMHYPERCHUNKFREE pNext = (PMMHYPERCHUNKFREE)((char *)pFree + pFree->offNext);
547 if (pFree->offPrev)
549 pNext->offPrev += pFree->offPrev;
550 PMMHYPERCHUNKFREE pPrev = (PMMHYPERCHUNKFREE)((char *)pFree + pFree->offPrev);
551 pPrev->offNext += pFree->offNext;
556 pHeap->offFreeHead += pFree->offNext;
563 if (pFree->offPrev)
565 pHeap->offFreeTail += pFree->offPrev;
566 PMMHYPERCHUNKFREE pPrev = (PMMHYPERCHUNKFREE)((char *)pFree + pFree->offPrev);
578 pHeap->cbFree - pFree->cb, -(int32_t)pFree->cb));
579 pHeap->cbFree -= pFree->cb;
580 MMHYPERCHUNK_SET_TYPE(&pFree->core, MMHYPERCHUNK_FLAGS_USED);
581 pRet = &pFree->core;
582 ASSERT_CHUNK(pHeap, &pFree->core);
583 Log3(("mmHyperAllocChunk: Converted free chunk %p to used chunk.\n", pFree));
591 pFree = pFree->offNext ? (PMMHYPERCHUNKFREE)((char *)pFree + pFree->offNext) : NULL;
645 PMMHYPERCHUNKFREE pFree = (PMMHYPERCHUNKFREE)((char *)pHeap->CTX_SUFF(pbHeap) + pHeap->offFreeTail);
646 ASSERT_CHUNK_FREE(pHeap, pFree);
647 if ( (((uintptr_t)(&pFree->core + 1) + pFree->cb) & (PAGE_OFFSET_MASK - 1))
648 || pFree->cb + sizeof(MMHYPERCHUNK) < cb)
655 if (pFree->cb > cb)
660 pFree->cb -= cb;
661 pvRet = (char *)(&pFree->core + 1) + pFree->cb;
662 AssertMsg(RT_ALIGN_P(pvRet, PAGE_SIZE) == pvRet, ("pvRet=%p cb=%#x pFree=%p pFree->cb=%#x\n", pvRet, cb, pFree, pFree->cb));
665 ASSERT_CHUNK_FREE(pHeap, pFree);
666 Log3(("mmHyperAllocPages: Allocated from pFree=%p new pFree->cb=%d\n", pFree, pFree->cb));
673 pvRet = (char *)(&pFree->core + 1) + pFree->cb - cb;
674 Log3(("mmHyperAllocPages: cbFree %d -> %d (%d)\n", pHeap->cbFree, pHeap->cbFree - pFree->cb, -(int32_t)pFree->cb));
675 pHeap->cbFree -= pFree->cb;
678 if (pvRet != (void *)pFree)
680 AssertMsg(MMHYPERCHUNK_GET_OFFPREV(&pFree->core), ("How the *beep* did someone manage to allocated up all the heap with page aligned memory?!?\n"));
681 PMMHYPERCHUNK pPrev = (PMMHYPERCHUNK)((char *)pFree + MMHYPERCHUNK_GET_OFFPREV(&pFree->core));
682 pPrev->offNext += (uintptr_t)pvRet - (uintptr_t)pFree;
686 pStat->cbAllocated += (uintptr_t)pvRet - (uintptr_t)pFree;
687 pStat->cbCurAllocated += (uintptr_t)pvRet - (uintptr_t)pFree;
689 Log3(("mmHyperAllocPages: Added %d to %p (page align)\n", (uintptr_t)pvRet - (uintptr_t)pFree, pFree));
693 if (pFree->offPrev)
695 pHeap->offFreeTail += pFree->offPrev;
696 ((PMMHYPERCHUNKFREE)((char *)pFree + pFree->offPrev))->offNext = 0;
703 Log3(("mmHyperAllocPages: Unlinked pFree=%d\n", pFree));
958 PMMHYPERCHUNKFREE pFree = (PMMHYPERCHUNKFREE)pChunk;
970 if (pFree->core.offNext)
972 pRight = (PMMHYPERCHUNKFREE)((char *)pFree + pFree->core.offNext);
997 if (pLeft == pFree)
1009 MMHYPERCHUNK_SET_TYPE(&pFree->core, MMHYPERCHUNK_FLAGS_FREE);
1010 pFree->offPrev = 0;
1011 pHeap->offFreeHead = (uintptr_t)pFree - (uintptr_t)pHeap->CTX_SUFF(pbHeap);
1014 pFree->offNext = (uintptr_t)pRight - (uintptr_t)pFree;
1015 pRight->offPrev = -(int32_t)pFree->offNext;
1019 pFree->offNext = 0;
1022 Log3(("mmHyperFree: Inserted %p at head of free chain.\n", pFree));
1029 if ((char *)pLeft + pLeft->core.offNext == (char *)pFree)
1031 if (pFree->core.offNext)
1033 pLeft->core.offNext = pLeft->core.offNext + pFree->core.offNext;
1038 pFree = pLeft;
1041 Log3(("mmHyperFree: Merging %p into %p (cb=%d).\n", pFree, pLeft, pLeft->cb));
1048 MMHYPERCHUNK_SET_TYPE(&pFree->core, MMHYPERCHUNK_FLAGS_FREE);
1049 pFree->offPrev = (uintptr_t)pLeft - (uintptr_t)pFree;
1050 pLeft->offNext = -pFree->offPrev;
1053 pFree->offNext = (uintptr_t)pRight - (uintptr_t)pFree;
1054 pRight->offPrev = -(int32_t)pFree->offNext;
1058 pFree->offNext = 0;
1059 pHeap->offFreeTail = (uintptr_t)pFree - (uintptr_t)pHeap->CTX_SUFF(pbHeap);
1061 Log3(("mmHyperFree: Inserted %p after %p in free list.\n", pFree, pLeft));
1068 if (pRight && (char *)pRight == (char *)pFree + pFree->core.offNext)
1073 pFree->core.offNext += pRight->core.offNext;
1074 PMMHYPERCHUNK pNext = (PMMHYPERCHUNK)((char *)pFree + pFree->core.offNext);
1075 MMHYPERCHUNK_SET_OFFPREV(pNext, -(int32_t)pFree->core.offNext);
1079 pFree->core.offNext = 0;
1084 pFree->offNext += pRight->offNext;
1085 ((PMMHYPERCHUNKFREE)((char *)pFree + pFree->offNext))->offPrev = -(int32_t)pFree->offNext;
1089 pFree->offNext = 0;
1090 pHeap->offFreeTail = (uintptr_t)pFree - (uintptr_t)pHeap->CTX_SUFF(pbHeap);
1094 Log3(("mmHyperFree: Merged %p (cb=%d) into %p.\n", pRight, pRight->cb, pFree));
1098 if (pFree->core.offNext)
1099 pFree->cb = pFree->core.offNext - sizeof(MMHYPERCHUNK);
1101 pFree->cb = pHeap->offPageAligned - ((uintptr_t)pFree - (uintptr_t)pHeap->CTX_SUFF(pbHeap)) - sizeof(MMHYPERCHUNK);
1102 Log3(("mmHyperFree: cbFree %d -> %d (%d)\n", pHeap->cbFree, pHeap->cbFree + pFree->cb, pFree->cb));
1103 pHeap->cbFree += pFree->cb;
1104 ASSERT_CHUNK_FREE(pHeap, pFree);