From d5ed6e88a9bea1879e41d7defaf1edea7c09f554 Mon Sep 17 00:00:00 2001 From: Glenn Kasten Date: Fri, 2 Nov 2012 13:05:14 -0700 Subject: Fix call to restoreTrack_l() without lock held Also document lock order Change-Id: I2c1f273a0a51fa79ee3dd766de8d23083e270051 --- media/libmedia/AudioTrack.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'media') diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index 5348646..1f4f3d0 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -1122,8 +1122,14 @@ TimedAudioTrack::TimedAudioTrack() { status_t TimedAudioTrack::allocateTimedBuffer(size_t size, sp* buffer) { + AutoMutex lock(mLock); status_t result = UNKNOWN_ERROR; + // acquire a strong reference on the IMemory and IAudioTrack so that they cannot be destroyed + // while we are accessing the cblk + sp audioTrack = mAudioTrack; + sp iMem = mCblkMemory; + // If the track is not invalid already, try to allocate a buffer. alloc // fails indicating that the server is dead, flag the track as invalid so // we can attempt to restore in just a bit. -- cgit v1.1