Merge "This reverts an earlier change 4aeec2da39fce4de9b07b694d59fd308ffb3d491"
diff --git a/media/libmediaplayerservice/StagefrightPlayer.cpp b/media/libmediaplayerservice/StagefrightPlayer.cpp
index c5cbd23..6429395 100644
--- a/media/libmediaplayerservice/StagefrightPlayer.cpp
+++ b/media/libmediaplayerservice/StagefrightPlayer.cpp
@@ -110,7 +110,7 @@
 }
 
 status_t StagefrightPlayer::seekTo(int msec) {
-    LOGV("seekTo");
+    LOGV("seekTo %.2f secs", msec / 1E3);
 
     status_t err = mPlayer->seekTo((int64_t)msec * 1000);
 
diff --git a/media/libstagefright/AudioPlayer.cpp b/media/libstagefright/AudioPlayer.cpp
index 00c749e..fcea848 100644
--- a/media/libstagefright/AudioPlayer.cpp
+++ b/media/libstagefright/AudioPlayer.cpp
@@ -309,6 +309,10 @@
         return 0;
     }
 
+    bool postSeekComplete = false;
+    bool postEOS = false;
+    int64_t postEOSDelayUs = 0;
+
     size_t size_done = 0;
     size_t size_remaining = size;
     while (size_remaining > 0) {
@@ -335,7 +339,7 @@
 
                 mSeeking = false;
                 if (mObserver) {
-                    mObserver->postAudioSeekComplete();
+                    postSeekComplete = true;
                 }
             }
         }
@@ -387,7 +391,8 @@
                          numFramesPendingPlayout,
                          timeToCompletionUs, timeToCompletionUs / 1E6);
 
-                    mObserver->postAudioEOS(timeToCompletionUs + mLatencyUs);
+                    postEOS = true;
+                    postEOSDelayUs = timeToCompletionUs + mLatencyUs;
                 }
 
                 mReachedEOS = true;
@@ -431,8 +436,18 @@
         size_remaining -= copy;
     }
 
-    Mutex::Autolock autoLock(mLock);
-    mNumFramesPlayed += size_done / mFrameSize;
+    {
+        Mutex::Autolock autoLock(mLock);
+        mNumFramesPlayed += size_done / mFrameSize;
+    }
+
+    if (postEOS) {
+        mObserver->postAudioEOS(postEOSDelayUs);
+    }
+
+    if (postSeekComplete) {
+        mObserver->postAudioSeekComplete();
+    }
 
     return size_done;
 }
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index f25d498..f31c2ac 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -1859,10 +1859,12 @@
 }
 
 void AwesomePlayer::postAudioEOS(int64_t delayUs) {
+    Mutex::Autolock autoLock(mLock);
     postCheckAudioStatusEvent_l(delayUs);
 }
 
 void AwesomePlayer::postAudioSeekComplete() {
+    Mutex::Autolock autoLock(mLock);
     postCheckAudioStatusEvent_l(0 /* delayUs */);
 }