Fixes a race condition between entering ERROR state and initial buffer submit.
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index 91db766..eaad4fc 100644
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -1272,7 +1272,7 @@
 }
 
 void OMXCodec::drainInputBuffers() {
-    CHECK_EQ(mState, EXECUTING);
+    CHECK(mState == EXECUTING || mState == RECONFIGURING);
 
     Vector<BufferInfo> *buffers = &mPortBuffers[kPortIndexInput];
     for (size_t i = 0; i < buffers->size(); ++i) {
@@ -1716,15 +1716,20 @@
 
     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;