Simplify flow by having all mActiveTrack.clear() continue
Change-Id: Icd160b0aa79a747bd19fabaa7feee813afb155e0
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 8a60b2a..44763a6 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -4244,48 +4244,49 @@
acquireWakeLock_l();
continue;
}
+
if (activeTrack->isTerminated()) {
removeTrack_l(activeTrack);
mActiveTrack.clear();
- } else {
- switch (activeTrack->mState) {
- case TrackBase::PAUSING:
- standby();
- mActiveTrack.clear();
- mStartStopCond.broadcast();
- break;
-
- case TrackBase::RESUMING:
- if (mReqChannelCount != activeTrack->channelCount()) {
- mActiveTrack.clear();
- mStartStopCond.broadcast();
- } else if (readOnce) {
- // record start succeeds only if first read from audio input
- // succeeds
- if (mBytesRead >= 0) {
- activeTrack->mState = TrackBase::ACTIVE;
- } else {
- mActiveTrack.clear();
- }
- mStartStopCond.broadcast();
- }
- mStandby = false;
- break;
-
- case TrackBase::ACTIVE:
- break;
-
- case TrackBase::IDLE:
- break;
-
- default:
- LOG_FATAL("Unexpected activeTrack->mState %d", activeTrack->mState);
- }
-
- }
- if (mActiveTrack == 0) {
continue;
}
+
+ switch (activeTrack->mState) {
+ case TrackBase::PAUSING:
+ standby();
+ mActiveTrack.clear();
+ mStartStopCond.broadcast();
+ doSleep = true;
+ continue;
+
+ case TrackBase::RESUMING:
+ mStandby = false;
+ if (mReqChannelCount != activeTrack->channelCount()) {
+ mActiveTrack.clear();
+ mStartStopCond.broadcast();
+ continue;
+ }
+ if (readOnce) {
+ mStartStopCond.broadcast();
+ // record start succeeds only if first read from audio input succeeds
+ if (mBytesRead < 0) {
+ mActiveTrack.clear();
+ continue;
+ }
+ activeTrack->mState = TrackBase::ACTIVE;
+ }
+ break;
+
+ case TrackBase::ACTIVE:
+ break;
+
+ case TrackBase::IDLE:
+ break;
+
+ default:
+ LOG_FATAL("Unexpected activeTrack->mState %d", activeTrack->mState);
+ }
+
lockEffectChains_l(effectChains);
}