Example #1
0
CheckedBoolean CopiedSpace::getFreshBlock(AllocationEffort allocationEffort, CopiedBlock** outBlock)
{
    CopiedBlock* block = 0;
    if (allocationEffort == AllocationMustSucceed) {
        if (HeapBlock* heapBlock = m_heap->blockAllocator().allocate())
            block = new (NotNull, heapBlock) CopiedBlock(heapBlock->m_allocation);
        else if (!allocateNewBlock(&block)) {
            *outBlock = 0;
            ASSERT_NOT_REACHED();
            return false;
        }
    } else {
        ASSERT(allocationEffort == AllocationCanFail);
        if (m_heap->shouldCollect())
            m_heap->collect(Heap::DoNotSweep);

        if (!getFreshBlock(AllocationMustSucceed, &block)) {
            *outBlock = 0;
            ASSERT_NOT_REACHED();
            return false;
        }
    }
    ASSERT(block);
    ASSERT(is8ByteAligned(block->m_offset));
    *outBlock = block;
    return true;
}
Example #2
0
CopiedBlock::CopiedBlock(size_t capacity)
    : DoublyLinkedListNode<CopiedBlock>()
    , m_capacity(capacity)
    , m_remaining(payloadCapacity())
    , m_isPinned(false)
    , m_isOld(false)
    , m_liveBytes(0)
#ifndef NDEBUG
    , m_liveObjects(0)
#endif
{
    ASSERT(is8ByteAligned(reinterpret_cast<void*>(m_remaining)));
}