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

Commit e3f9800f authored by Leon Scroggins III's avatar Leon Scroggins III
Browse files

Fix a memory leak with empty screenshot.

Use an autodeleter to delete the ScreenshotClient when it's not
needed.

Discovered while investigating BUG:15454296, but it does not fix
the problem.

Change-Id: I00ea81de15ddc2507d904a6c20af3c410f573dce
parent cb0462d3
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -42,6 +42,8 @@

#include <ScopedUtfChars.h>

#include "SkTemplates.h"

// ----------------------------------------------------------------------------

namespace android {
@@ -125,7 +127,7 @@ static jobject nativeScreenshotBitmap(JNIEnv* env, jclass clazz,
    int bottom = env->GetIntField(sourceCropObj, gRectClassInfo.bottom);
    Rect sourceCrop(left, top, right, bottom);

    ScreenshotClient* screenshot = new ScreenshotClient();
    SkAutoTDelete<ScreenshotClient> screenshot(new ScreenshotClient());
    status_t res;
    if (width > 0 && height > 0) {
        if (allLayers) {
@@ -139,7 +141,6 @@ static jobject nativeScreenshotBitmap(JNIEnv* env, jclass clazz,
        res = screenshot->update(displayToken, sourceCrop, useIdentityTransform);
    }
    if (res != NO_ERROR) {
        delete screenshot;
        return NULL;
    }

@@ -164,7 +165,6 @@ static jobject nativeScreenshotBitmap(JNIEnv* env, jclass clazz,
            break;
        }
        default: {
            delete screenshot;
            return NULL;
        }
    }
@@ -178,7 +178,7 @@ static jobject nativeScreenshotBitmap(JNIEnv* env, jclass clazz,
        // takes ownership of ScreenshotClient
        SkMallocPixelRef* pixels = SkMallocPixelRef::NewWithProc(screenshotInfo,
                (size_t) rowBytes, NULL, (void*) screenshot->getPixels(), &DeleteScreenshot,
                (void*) screenshot);
                (void*) (screenshot.detach()));
        pixels->setImmutable();
        bitmap->setPixelRef(pixels)->unref();
        bitmap->lockPixels();