From d06e5b877c67b8d9dcba94fdce5bb8f57dfb63d3 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Fri, 28 Aug 2009 13:18:14 -0700 Subject: [PATCH] Fixes a race condition between entering ERROR state and initial buffer submit. --- media/libstagefright/OMXCodec.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index 91db7663411ce..eaad4fc06b1e1 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -1272,7 +1272,7 @@ void OMXCodec::fillOutputBuffers() { } void OMXCodec::drainInputBuffers() { - CHECK_EQ(mState, EXECUTING); + CHECK(mState == EXECUTING || mState == RECONFIGURING); Vector *buffers = &mPortBuffers[kPortIndexInput]; for (size_t i = 0; i < buffers->size(); ++i) { @@ -1716,15 +1716,20 @@ status_t OMXCodec::read( Mutex::Autolock autoLock(mLock); + if (mState != EXECUTING && mState != RECONFIGURING) { + return UNKNOWN_ERROR; + } + if (mInitialBufferSubmit) { mInitialBufferSubmit = false; drainInputBuffers(); - fillOutputBuffers(); - } - if (mState != EXECUTING && mState != RECONFIGURING) { - return UNKNOWN_ERROR; + if (mState == EXECUTING) { + // Otherwise mState == RECONFIGURING and this code will trigger + // after the output port is reenabled. + fillOutputBuffers(); + } } int64_t seekTimeUs;