Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4118480a authored by Chris Craik's avatar Chris Craik Committed by Android Git Automerger
Browse files

am 80470cdf: Merge "Solve three memory leaks related to PatchCache"

* commit '80470cdf':
  Solve three memory leaks related to PatchCache
parents c1d863e7 80470cdf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ Patch::Patch(): vertices(NULL), verticesCount(0), indexCount(0), hasEmptyQuads(f
}

Patch::~Patch() {
    delete[] vertices;
}

///////////////////////////////////////////////////////////////////////////////
+15 −2
Original line number Diff line number Diff line
@@ -119,6 +119,17 @@ void PatchCache::remove(Vector<patch_pair_t>& patchesToRemove, Res_png_9patch* p

void PatchCache::removeDeferred(Res_png_9patch* patch) {
    Mutex::Autolock _l(mLock);

    // Assert that patch is not already garbage
    size_t count = mGarbage.size();
    for (size_t i = 0; i < count; i++) {
        if (patch == mGarbage[i]) {
            patch = NULL;
            break;
        }
    }
    LOG_ALWAYS_FATAL_IF(patch == NULL);

    mGarbage.push(patch);
}

@@ -143,8 +154,8 @@ void PatchCache::clearGarbage() {
    for (size_t i = 0; i < patchesToRemove.size(); i++) {
        const patch_pair_t& pair = patchesToRemove[i];

        // Add a new free block to the list
        const Patch* patch = pair.getSecond();
        // Release the patch and mark the space in the free list
        Patch* patch = pair.getSecond();
        BufferBlock* block = new BufferBlock(patch->offset, patch->getSize());
        block->next = mFreeBlocks;
        mFreeBlocks = block;
@@ -152,6 +163,7 @@ void PatchCache::clearGarbage() {
        mSize -= patch->getSize();

        mCache.remove(*pair.getFirst());
        delete patch;
    }

#if DEBUG_PATCHES
@@ -216,6 +228,7 @@ void PatchCache::setupMesh(Patch* newMesh, TextureVertex* vertices) {
        } else {
            mFreeBlocks = block->next;
        }
        delete block;
    } else {
        // Resize the block now that it's occupied
        block->offset += size;