Merge change 6614 into donut

* changes:
  Fix issue 1970108: crash in AudioFlinger::isMusicActive()
This commit is contained in:
Android (Google) Code Review
2009-07-09 08:47:59 -07:00
2 changed files with 10 additions and 5 deletions

View File

@ -738,12 +738,13 @@ bool AudioFlinger::streamMute(int stream) const
bool AudioFlinger::isMusicActive() const
{
Mutex::Autolock _l(mLock);
#ifdef WITH_A2DP
if (isA2dpEnabled()) {
return mA2dpMixerThread->isMusicActive();
return mA2dpMixerThread->isMusicActive_l();
}
#endif
return mHardwareMixerThread->isMusicActive();
return mHardwareMixerThread->isMusicActive_l();
}
status_t AudioFlinger::setParameter(const char* key, const char* value)
@ -1444,7 +1445,8 @@ bool AudioFlinger::MixerThread::streamMute(int stream) const
return mStreamTypes[stream].mute;
}
bool AudioFlinger::MixerThread::isMusicActive() const
// isMusicActive_l() must be called with AudioFlinger::mLock held
bool AudioFlinger::MixerThread::isMusicActive_l() const
{
size_t count = mActiveTracks.size();
for (size_t i = 0 ; i < count ; ++i) {
@ -2030,7 +2032,10 @@ void AudioFlinger::MixerThread::OutputTrack::write(int16_t* data, uint32_t frame
inBuffer.i16 = data;
if (mCblk->user == 0) {
if (mOutputMixerThread->isMusicActive()) {
mOutputMixerThread->mAudioFlinger->mLock.lock();
bool isMusicActive = mOutputMixerThread->isMusicActive_l();
mOutputMixerThread->mAudioFlinger->mLock.unlock();
if (isMusicActive) {
mCblk->forceReady = 1;
LOGV("OutputTrack::start() force ready");
} else if (mCblk->frameCount > frames){

View File

@ -463,7 +463,7 @@ private:
virtual float streamVolume(int stream) const;
virtual bool streamMute(int stream) const;
bool isMusicActive() const;
bool isMusicActive_l() const;
sp<Track> createTrack_l(