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
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index a285e6c..d2b2931 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -1524,8 +1524,7 @@
for (size_t i = 0; i < mTracks.size(); ++i) {
sp<Track> track = mTracks[i];
- if (sessionId == track->sessionId() &&
- !(track->mCblk->flags & CBLK_INVALID)) {
+ if (sessionId == track->sessionId() && !track->isInvalid()) {
result |= TRACK_SESSION;
break;
}
@@ -1543,8 +1542,7 @@
}
for (size_t i = 0; i < mTracks.size(); i++) {
sp<Track> track = mTracks[i];
- if (sessionId == track->sessionId() &&
- !(track->mCblk->flags & CBLK_INVALID)) {
+ if (sessionId == track->sessionId() && !track->isInvalid()) {
return AudioSystem::getStrategyForStream(track->streamType());
}
}
@@ -1721,8 +1719,7 @@
for (size_t i = 0; i < size; i++) {
sp<Track> t = mTracks[i];
if (t->streamType() == streamType) {
- android_atomic_or(CBLK_INVALID, &t->mCblk->flags);
- t->mCblk->cv.signal();
+ t->invalidate();
}
}
}