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

Commit 393436e3 authored by Robert Shih's avatar Robert Shih Committed by android-build-merger
Browse files

DO NOT MERGE Don't leak `this` out of GraphicBufferSource ctor am: 6301f882

am: 188e7dbd

Change-Id: If13260b623df38c7ba99becca87025e985d23c5c
parents 8bcf9aa2 188e7dbd
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -177,9 +177,12 @@ GraphicBufferSource::GraphicBufferSource(
        mIsPersistent = true;
    }
    mConsumer->setDefaultBufferSize(bufferWidth, bufferHeight);
    // Note that we can't create an sp<...>(this) in a ctor that will not keep a
    // reference once the ctor ends, as that would cause the refcount of 'this'
    // dropping to 0 at the end of the ctor.  Since all we need is a wp<...>
}

status_t GraphicBufferSource::init() {
    // Note that we can't create an sp<...>(this) in a method that will not keep a
    // reference once the method ends, as that may cause the refcount of 'this'
    // dropping to 0 at the end of the method.  Since all we need is a wp<...>
    // that's what we create.
    wp<BufferQueue::ConsumerListener> listener = static_cast<BufferQueue::ConsumerListener*>(this);
    sp<IConsumerListener> proxy;
@@ -190,15 +193,14 @@ GraphicBufferSource::GraphicBufferSource(
    }

    mInitCheck = mConsumer->consumerConnect(proxy, false);
    if (mInitCheck != NO_ERROR) {
    if (mInitCheck == NO_ERROR) {
        memset(&mColorAspects, 0, sizeof(mColorAspects));
    } else {
        ALOGE("Error connecting to BufferQueue: %s (%d)",
                strerror(-mInitCheck), mInitCheck);
        return;
    }

    memset(&mColorAspects, 0, sizeof(mColorAspects));

    CHECK(mInitCheck == NO_ERROR);
    return mInitCheck;
}

GraphicBufferSource::~GraphicBufferSource() {
+1 −5
Original line number Diff line number Diff line
@@ -62,11 +62,7 @@ public:

    virtual ~GraphicBufferSource();

    // We can't throw an exception if the constructor fails, so we just set
    // this and require that the caller test the value.
    status_t initCheck() const {
        return mInitCheck;
    }
    status_t init();

    // Returns the handle to the producer side of the BufferQueue.  Buffers
    // queued on this will be received by GraphicBufferSource.
+1 −1
Original line number Diff line number Diff line
@@ -1130,7 +1130,7 @@ status_t OMXNodeInstance::createGraphicBufferSource(
            usageBits,
            bufferConsumer);

    if ((err = bufferSource->initCheck()) != OK) {
    if ((err = bufferSource->init()) != OK) {
        return err;
    }
    setGraphicBufferSource(bufferSource);