Merge change Iac196e17 into eclair

* changes:
  Fix issue 2292062: Audio freezes for three seconds when choosing ringtones with a headset connected and music playing.
diff --git a/libs/audioflinger/AudioFlinger.cpp b/libs/audioflinger/AudioFlinger.cpp
index daec6e8..9ec8de5 100644
--- a/libs/audioflinger/AudioFlinger.cpp
+++ b/libs/audioflinger/AudioFlinger.cpp
@@ -2277,10 +2277,8 @@
     LOGV("PlaybackThread::Track destructor");
     sp<ThreadBase> thread = mThread.promote();
     if (thread != 0) {
-        thread->mLock.lock();
+        Mutex::Autolock _l(thread->mLock);
         mState = TERMINATED;
-        thread->mLock.unlock();
-        AudioSystem::releaseOutput(thread->id());
     }
 }
 
@@ -2298,8 +2296,11 @@
     { // scope for mLock
         sp<ThreadBase> thread = mThread.promote();
         if (thread != 0) {
-            if (!isOutputTrack() && (mState == ACTIVE || mState == RESUMING)) {
-                AudioSystem::stopOutput(thread->id(), (AudioSystem::stream_type)mStreamType);
+            if (!isOutputTrack()) {
+                if (mState == ACTIVE || mState == RESUMING) {
+                    AudioSystem::stopOutput(thread->id(), (AudioSystem::stream_type)mStreamType);
+                }
+                AudioSystem::releaseOutput(thread->id());
             }
             Mutex::Autolock _l(thread->mLock);
             PlaybackThread *playbackThread = (PlaybackThread *)thread.get();