summaryrefslogtreecommitdiffstats
path: root/services/audioflinger/Tracks.cpp
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2012-12-04 12:12:34 -0800
committerGlenn Kasten <gkasten@google.com>2012-12-12 09:38:48 -0800
commit5736c35b841de56ce394b4879389f669b61425e6 (patch)
treeb14624b7de512d74aab43e22b1f84fe08c29f647 /services/audioflinger/Tracks.cpp
parentefc0cfb61e34c3bc688a7cbcc1ccef23922251c1 (diff)
downloadframeworks_av-5736c35b841de56ce394b4879389f669b61425e6.zip
frameworks_av-5736c35b841de56ce394b4879389f669b61425e6.tar.gz
frameworks_av-5736c35b841de56ce394b4879389f669b61425e6.tar.bz2
Prepare for track invalidation to be done by proxy
Don't rely on control block to determine whether track has been marked invalid. Instead, use a local flag that can't be corrupted by client. Change-Id: I783dafe828f93c1c3d2d0e5a08105ea536436efb
Diffstat (limited to 'services/audioflinger/Tracks.cpp')
-rw-r--r--services/audioflinger/Tracks.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp
index e8ca5ee..9b611d2 100644
--- a/services/audioflinger/Tracks.cpp
+++ b/services/audioflinger/Tracks.cpp
@@ -323,7 +323,8 @@ AudioFlinger::PlaybackThread::Track::Track(
mFlags(flags),
mFastIndex(-1),
mUnderrunCount(0),
- mCachedVolume(1.0)
+ mCachedVolume(1.0),
+ mIsInvalid(false)
{
if (mCblk != NULL) {
// to avoid leaking a track name, do not allocate one unless there is an mCblk
@@ -834,6 +835,14 @@ bool AudioFlinger::PlaybackThread::Track::isOut() const
return true;
}
+void AudioFlinger::PlaybackThread::Track::invalidate()
+{
+ // FIXME should use proxy
+ android_atomic_or(CBLK_INVALID, &mCblk->flags);
+ mCblk->cv.signal();
+ mIsInvalid = true;
+}
+
// ----------------------------------------------------------------------------
sp<AudioFlinger::PlaybackThread::TimedTrack>