libmediaplayerservice: Explicitly force callbacks to stop running

This is needed to prevent a race condition with
the callbacks running after a close. MediaPlayerService instance
can go out of scope and callbacks from AudioTrack can lead to crash
in MediaPlayerService or NuPlayer.

Flag: EXEMPT bugfix
Bug: 183765091
Bug: 351695164
Test: see bug for validation
Change-Id: I48ebb5643b65eec8751c7bd345bc1266c4a98659
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 10a1da7..761137e 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -2514,6 +2514,15 @@
     {
         Mutex::Autolock lock(mLock);
         track = mTrack;
+    }
+
+    // do not hold lock while joining.
+    if (track) {
+        track->stopAndJoinCallbacks();
+    }
+
+    {
+        Mutex::Autolock lock(mLock);
         close_l(); // clears mTrack
     }
     // destruction of the track occurs outside of mutex.