Code simplification and movement to prepare for mActiveTracks

Share code to acquire wake lock at entry to loop

Change-Id: I01fb645de9417055c0adfc6a4c4011bf22ea4f94
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 4e23129..a3022c7 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -4423,12 +4423,6 @@
     nsecs_t lastWarning = 0;
 
     inputStandBy();
-    sp<RecordTrack> activeTrack;
-    {
-        Mutex::Autolock _l(mLock);
-        activeTrack = mActiveTrack;
-        acquireWakeLock_l(activeTrack != 0 ? activeTrack->uid() : -1);
-    }
 
     // used to verify we've read at least once before evaluating how many bytes were read
     bool readOnce = false;
@@ -4436,6 +4430,14 @@
     // used to request a deferred sleep, to be executed later while mutex is unlocked
     bool doSleep = false;
 
+reacquire_wakelock:
+    sp<RecordTrack> activeTrack;
+    {
+        Mutex::Autolock _l(mLock);
+        activeTrack = mActiveTrack;
+        acquireWakeLock_l(activeTrack != 0 ? activeTrack->uid() : -1);
+    }
+
     // start recording
     for (;;) {
         TrackBase::track_state activeTrackState;
@@ -4455,14 +4457,9 @@
             processConfigEvents_l();
             // return value 'reconfig' is currently unused
             bool reconfig = checkForNewParameters_l();
-            if (mActiveTrack != 0 && activeTrack != mActiveTrack) {
-                SortedVector<int> tmp;
-                tmp.add(mActiveTrack->uid());
-                updateWakeLockUids_l(tmp);
-            }
-            // make a stable copy of mActiveTrack
-            activeTrack = mActiveTrack;
-            if (activeTrack == 0) {
+
+            // if no active track, then standby and release wakelock
+            if (mActiveTrack == 0) {
                 standbyIfNotAlreadyInStandby();
                 // exitPending() can't become true here
                 releaseWakeLock_l();
@@ -4470,8 +4467,14 @@
                 // go to sleep
                 mWaitWorkCV.wait(mLock);
                 ALOGV("RecordThread: loop starting");
-                acquireWakeLock_l(mActiveTrack != 0 ? mActiveTrack->uid() : -1);
-                continue;
+                goto reacquire_wakelock;
+            }
+
+            if (activeTrack != mActiveTrack) {
+                SortedVector<int> tmp;
+                tmp.add(mActiveTrack->uid());
+                updateWakeLockUids_l(tmp);
+                activeTrack = mActiveTrack;
             }
 
             if (activeTrack->isTerminated()) {
@@ -4874,8 +4877,8 @@
         if (mActiveTrack != 0) {
             if (recordTrack != mActiveTrack.get()) {
                 status = -EBUSY;
-            } else if (mActiveTrack->mState == TrackBase::PAUSING) {
-                mActiveTrack->mState = TrackBase::ACTIVE;
+            } else if (recordTrack->mState == TrackBase::PAUSING) {
+                recordTrack->mState = TrackBase::ACTIVE;
             }
             return status;
         }
@@ -4903,7 +4906,7 @@
         }
         // FIXME hijacking a playback track state name which was intended for start after pause;
         //       here 'STARTING_2' would be more accurate
-        mActiveTrack->mState = TrackBase::RESUMING;
+        recordTrack->mState = TrackBase::RESUMING;
         // signal thread to start
         ALOGV("Signal record thread");
         mWaitWorkCV.broadcast();