From 4f17dadd3cfd9940893ea042ca8883c6aa6ada07 Mon Sep 17 00:00:00 2001 From: Robert Shih Date: Tue, 30 Sep 2014 14:17:38 -0700 Subject: NuCachedSource2: fix disconnect process - clear mAsyncResult - return early from reads if mDisconnecting is set Bug: 17696761 Change-Id: I98bfc3f5f06594915bd58faf71fbcded482664d2 --- media/libstagefright/NuCachedSource2.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/media/libstagefright/NuCachedSource2.cpp b/media/libstagefright/NuCachedSource2.cpp index f469d4d..bd0a41d 100644 --- a/media/libstagefright/NuCachedSource2.cpp +++ b/media/libstagefright/NuCachedSource2.cpp @@ -456,6 +456,10 @@ void NuCachedSource2::onRead(const sp &msg) { } Mutex::Autolock autoLock(mLock); + if (mDisconnecting) { + mCondition.signal(); + return; + } CHECK(mAsyncResult == NULL); @@ -502,6 +506,9 @@ ssize_t NuCachedSource2::readAt(off64_t offset, void *data, size_t size) { ALOGV("readAt offset %lld, size %zu", offset, size); Mutex::Autolock autoLock(mLock); + if (mDisconnecting) { + return ERROR_END_OF_STREAM; + } // If the request can be completely satisfied from the cache, do so. @@ -528,6 +535,7 @@ ssize_t NuCachedSource2::readAt(off64_t offset, void *data, size_t size) { } if (mDisconnecting) { + mAsyncResult.clear(); return ERROR_END_OF_STREAM; } -- cgit v1.1