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

Commit 0140b054 authored by Praveen Chavan's avatar Praveen Chavan Committed by android-build-merger
Browse files

Omx: Fix codec instance leak if Observer dies

am: 990bc6de

Change-Id: I139c01dbbef983eb724dab9b00a62552c43b6a27
parents 4b8688ac 990bc6de
Loading
Loading
Loading
Loading
+13 −17
Original line number Diff line number Diff line
@@ -180,27 +180,23 @@ status_t Omx::freeNode(sp<OMXNodeInstance> const& instance) {
        return OK;
    }

    wp<IBase> observer;
    {
        Mutex::Autolock autoLock(mLock);
        ssize_t observerIndex = mNode2Observer.indexOfKey(instance.get());
        if (observerIndex < 0) {
            return OK;
        }
        observer = mNode2Observer.valueAt(observerIndex);
        if (observerIndex >= 0) {
            wp<IBase> observer = mNode2Observer.valueAt(observerIndex);
            ssize_t nodeIndex = mLiveNodes.indexOfKey(observer);
        if (nodeIndex < 0) {
            return OK;
        }
            if (nodeIndex >= 0) {
                mNode2Observer.removeItemsAt(observerIndex);
                mLiveNodes.removeItemsAt(nodeIndex);
    }

    {
                sp<IBase> sObserver = observer.promote();
                if (sObserver != nullptr) {
                    sObserver->unlinkToDeath(this);
                }
            } else {
                LOG(WARNING) << "Inconsistent observer record";
            }
        }
    }

    OMX_ERRORTYPE err = OMX_ErrorNone;