diff options
author | Ronghua Wu <ronghuawu@google.com> | 2015-10-26 10:17:37 -0700 |
---|---|---|
committer | The Android Automerger <android-build@google.com> | 2015-11-02 13:20:45 -0800 |
commit | 6c7a59a1a97553eed31351762439e70afcd840de (patch) | |
tree | ffb361f817132e8bc76d63a9905c0b7ca8c0da79 | |
parent | 28323c3d9a6dff48c480c50a358d9bd4fdeed407 (diff) | |
download | frameworks_av-6c7a59a1a97553eed31351762439e70afcd840de.zip frameworks_av-6c7a59a1a97553eed31351762439e70afcd840de.tar.gz frameworks_av-6c7a59a1a97553eed31351762439e70afcd840de.tar.bz2 |
ALooper::awaitResponse gets reply and returns immediately if the looper is stopped.
Bug: 25088488
Change-Id: Id33d5d75f1173db52d00f4ff71d4c2c4f27f72f5
-rw-r--r-- | media/libstagefright/foundation/ALooper.cpp | 20 |
1 files changed, 4 insertions, 16 deletions
diff --git a/media/libstagefright/foundation/ALooper.cpp b/media/libstagefright/foundation/ALooper.cpp index 5c2e9f9..9921636 100644 --- a/media/libstagefright/foundation/ALooper.cpp +++ b/media/libstagefright/foundation/ALooper.cpp @@ -234,31 +234,19 @@ sp<AReplyToken> ALooper::createReplyToken() { // to be called by AMessage::postAndAwaitResponse only status_t ALooper::awaitResponse(const sp<AReplyToken> &replyToken, sp<AMessage> *response) { - { - Mutex::Autolock autoLock(mLock); - if (mThread == NULL) { - return -ENOENT; - } - } - // return status in case we want to handle an interrupted wait Mutex::Autolock autoLock(mRepliesLock); CHECK(replyToken != NULL); - bool gotReply; - bool shouldContinue = true; - while (!(gotReply = replyToken->retrieveReply(response)) && shouldContinue) { - mRepliesCondition.wait(mRepliesLock); - + while (!replyToken->retrieveReply(response)) { { Mutex::Autolock autoLock(mLock); if (mThread == NULL) { - shouldContinue = false; - // continue and try to get potential reply one more time before break the loop + return -ENOENT; } } + mRepliesCondition.wait(mRepliesLock); } - - return gotReply ? OK : -ENOENT; + return OK; } status_t ALooper::postReply(const sp<AReplyToken> &replyToken, const sp<AMessage> &reply) { |