audioflinger: fix invalidateTracks() on offload thread
am: 1308462107
* commit '13084621072ea2e4c34e2a9d79793c621d9bf005':
audioflinger: fix invalidateTracks() on offload thread
Change-Id: I086758b71e476468f7b75ad185b6532fc277e165
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index d296ee3..9fe61702 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -2659,18 +2659,20 @@
}
}
-void AudioFlinger::PlaybackThread::invalidateTracks_l(audio_stream_type_t streamType)
+bool AudioFlinger::PlaybackThread::invalidateTracks_l(audio_stream_type_t streamType)
{
ALOGV("MixerThread::invalidateTracks() mixer %p, streamType %d, mTracks.size %zu",
this, streamType, mTracks.size());
-
+ bool trackMatch = false;
size_t size = mTracks.size();
for (size_t i = 0; i < size; i++) {
sp<Track> t = mTracks[i];
if (t->streamType() == streamType && t->isExternalTrack()) {
t->invalidate();
+ trackMatch = true;
}
}
+ return trackMatch;
}
void AudioFlinger::PlaybackThread::invalidateTracks(audio_stream_type_t streamType)
@@ -5429,8 +5431,9 @@
void AudioFlinger::OffloadThread::invalidateTracks(audio_stream_type_t streamType)
{
Mutex::Autolock _l(mLock);
- mFlushPending = true;
- PlaybackThread::invalidateTracks_l(streamType);
+ if (PlaybackThread::invalidateTracks_l(streamType)) {
+ mFlushPending = true;
+ }
}
// ----------------------------------------------------------------------------
diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h
index 1cceb6d..787b5c4 100644
--- a/services/audioflinger/Threads.h
+++ b/services/audioflinger/Threads.h
@@ -613,7 +613,7 @@
virtual bool isValidSyncEvent(const sp<SyncEvent>& event) const;
// called with AudioFlinger lock held
- void invalidateTracks_l(audio_stream_type_t streamType);
+ bool invalidateTracks_l(audio_stream_type_t streamType);
virtual void invalidateTracks(audio_stream_type_t streamType);
virtual size_t frameCount() const { return mNormalFrameCount; }