From f98197a7274c2d7da647f52b3d8b0c74492139af Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Fri, 17 Sep 2010 11:49:39 -0700 Subject: [PATCH] Make sure the message dispatcher stays around until after OMX_FreeHandle is finished in case it posts some more messages during shutdown. Clear the source as soon as possible in OMXCodec's destructor. Change-Id: I9c896cf07dea0c3201b6f074dbaf27e6d85cd784 --- media/libstagefright/OMXCodec.cpp | 2 ++ media/libstagefright/omx/OMX.cpp | 8 +++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index b6710afbf92de..523b79c2fdb9e 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -1443,6 +1443,8 @@ void OMXCodec::setComponentRole() { } OMXCodec::~OMXCodec() { + mSource.clear(); + CHECK(mState == LOADED || mState == ERROR); status_t err = mOMX->freeNode(mNode); diff --git a/media/libstagefright/omx/OMX.cpp b/media/libstagefright/omx/OMX.cpp index 6de761f06fe94..c927da182d575 100644 --- a/media/libstagefright/omx/OMX.cpp +++ b/media/libstagefright/omx/OMX.cpp @@ -245,13 +245,15 @@ status_t OMX::freeNode(node_id node) { CHECK(index >= 0); mLiveNodes.removeItemsAt(index); + instance->observer()->asBinder()->unlinkToDeath(this); + + status_t err = instance->freeNode(mMaster); + index = mDispatchers.indexOfKey(node); CHECK(index >= 0); mDispatchers.removeItemsAt(index); - instance->observer()->asBinder()->unlinkToDeath(this); - - return instance->freeNode(mMaster); + return err; } status_t OMX::sendCommand(