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

Commit 83f1d839 authored by Mathias Agopian's avatar Mathias Agopian Committed by Android Git Automerger
Browse files

am 7e477bfe: make sure BufferQueue releases newly acquired buffers on failures

* commit '7e477bfe':
  make sure BufferQueue releases newly acquired buffers on failures
parents ac4a4825 7e477bfe
Loading
Loading
Loading
Loading
+28 −24
Original line number Diff line number Diff line
@@ -235,17 +235,19 @@ status_t SurfaceTexture::updateTexImage() {
        if (image == EGL_NO_IMAGE_KHR) {
            if (mEGLSlots[buf].mGraphicBuffer == NULL) {
                ST_LOGE("updateTexImage: buffer at slot %d is null", buf);
                return BAD_VALUE;
            }
                err = BAD_VALUE;
            } else {
                image = createImage(dpy, mEGLSlots[buf].mGraphicBuffer);
                mEGLSlots[buf].mEglImage = image;
                if (image == EGL_NO_IMAGE_KHR) {
                    // NOTE: if dpy was invalid, createImage() is guaranteed to
                    // fail. so we'd end up here.
                return UNKNOWN_ERROR;
                    err = UNKNOWN_ERROR;
                }
            }
        }

        if (err == NO_ERROR) {
            GLint error;
            while ((error = glGetError()) != GL_NO_ERROR) {
                ST_LOGW("updateTexImage: clearing GL error: %#04x", error);
@@ -260,11 +262,12 @@ status_t SurfaceTexture::updateTexImage() {
                err = UNKNOWN_ERROR;
            }

        if (err == OK) {
            if (err == NO_ERROR) {
                err = syncForReleaseLocked(dpy);
            }
        }

        if (err != OK) {
        if (err != NO_ERROR) {
            // Release the buffer we just acquired.  It's not safe to
            // release the old buffer, so instead we just drop the new frame.
            mBufferQueue->releaseBuffer(buf, dpy, mEGLSlots[buf].mFence);
@@ -279,12 +282,13 @@ status_t SurfaceTexture::updateTexImage() {

        // release old buffer
        if (mCurrentTexture != BufferQueue::INVALID_BUFFER_SLOT) {
            status_t status = mBufferQueue->releaseBuffer(mCurrentTexture, dpy, mEGLSlots[mCurrentTexture].mFence);
            status_t status = mBufferQueue->releaseBuffer(mCurrentTexture, dpy,
                    mEGLSlots[mCurrentTexture].mFence);

            mEGLSlots[mCurrentTexture].mFence = EGL_NO_SYNC_KHR;
            if (status == BufferQueue::STALE_BUFFER_SLOT) {
                freeBufferLocked(mCurrentTexture);
            } else if (status != OK) {
            } else if (status != NO_ERROR) {
                ST_LOGE("updateTexImage: released invalid buffer");
                err = status;
            }