diff options
author | Andreas Huber <andih@google.com> | 2010-09-17 12:50:45 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-09-17 12:50:45 -0700 |
commit | ab1b9612fc5ad9d98ff76b3eb18d9f48a295f13e (patch) | |
tree | f6a8146ec7765f4fedb6a531dac4bfc5640ef9e3 /media | |
parent | 583027ca28629510622bde541cc1649371ac9502 (diff) | |
parent | 00998fbb52dfa78ac3a4b3706d64fc612926bfbc (diff) | |
download | frameworks_av-ab1b9612fc5ad9d98ff76b3eb18d9f48a295f13e.zip frameworks_av-ab1b9612fc5ad9d98ff76b3eb18d9f48a295f13e.tar.gz frameworks_av-ab1b9612fc5ad9d98ff76b3eb18d9f48a295f13e.tar.bz2 |
am f98197a7: 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.
Merge commit 'f98197a7274c2d7da647f52b3d8b0c74492139af' into gingerbread-plus-aosp
* commit 'f98197a7274c2d7da647f52b3d8b0c74492139af':
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.
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/OMXCodec.cpp | 2 | ||||
-rw-r--r-- | 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 b6710af..523b79c 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 6de761f..c927da1 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( |