From a96bd95dcfe886436652debbda77ceb634729da0 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 --- include/media/AudioTrack.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'include') diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h index 529f74e..1a19999 100644 --- a/include/media/AudioTrack.h +++ b/include/media/AudioTrack.h @@ -481,6 +481,7 @@ protected: // body of AudioTrackThread::threadLoop() bool processAudioBuffer(const sp& thread); + // caller must hold lock on mLock for all _l methods status_t createTrack_l(audio_stream_type_t streamType, uint32_t sampleRate, audio_format_t format, @@ -535,7 +536,13 @@ protected: audio_output_flags_t mFlags; int mSessionId; int mAuxEffectId; + + // When locking both mLock and mCblk->lock, must lock in this order to avoid deadlock: + // 1. mLock + // 2. mCblk->lock + // It is OK to lock only mCblk->lock. mutable Mutex mLock; + status_t mRestoreStatus; bool mIsTimed; int mPreviousPriority; // before start() -- cgit v1.1