Fix mediaserver crash issue
mDeviceCallback is not guarded by a lock, so it may be
cleared twice when another thread calls removeAudioDeviceCallback.
Solution: Guard mDeviceCallback with a lock.
Test: monkey test
Bug: 209707170
Change-Id: I1ff93d058b8f8ff7addb2eb1cd86a1c03ba80777
diff --git a/media/libaudioclient/AudioTrack.cpp b/media/libaudioclient/AudioTrack.cpp
index 9f5ac19..aedc051 100644
--- a/media/libaudioclient/AudioTrack.cpp
+++ b/media/libaudioclient/AudioTrack.cpp
@@ -357,7 +357,8 @@
mAudioTrackThread->requestExitAndWait();
mAudioTrackThread.clear();
}
- // No lock here: worst case we remove a NULL callback which will be a nop
+
+ AutoMutex lock(mLock);
if (mDeviceCallback != 0 && mOutput != AUDIO_IO_HANDLE_NONE) {
// This may not stop all of these device callbacks!
// TODO: Add some sort of protection.