From e532d37cf9342abbca398e4ce671b880369d90c6 Mon Sep 17 00:00:00 2001 From: Lajos Molnar Date: Fri, 26 Apr 2013 16:11:45 -0700 Subject: stagefright: Fix port-reconfiguration & output-buffer-filled race condition Remove the invalid assumption that when a port-reconfiguration event is received, buffers cannot be downstream (waiting to be rendered). Luckily, these buffers are properly handled (freed) after they are sent to be rendered. Change-Id: I1df39c1ffc2bfb96f8b7b4ee5be07cae654f956f Signed-off-by: Lajos Molnar Bug: 8736466 --- media/libstagefright/ACodec.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'media') diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index 994d3f4..64e3885 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -748,12 +748,10 @@ status_t ACodec::freeOutputBuffersNotOwnedByComponent() { BufferInfo *info = &mBuffers[kPortIndexOutput].editItemAt(i); - if (info->mStatus != - BufferInfo::OWNED_BY_COMPONENT) { - // We shouldn't have sent out any buffers to the client at this - // point. - CHECK_NE((int)info->mStatus, (int)BufferInfo::OWNED_BY_DOWNSTREAM); - + // At this time some buffers may still be with the component + // or being drained. + if (info->mStatus != BufferInfo::OWNED_BY_COMPONENT && + info->mStatus != BufferInfo::OWNED_BY_DOWNSTREAM) { CHECK_EQ((status_t)OK, freeBuffer(kPortIndexOutput, i)); } } -- cgit v1.1