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.