bug 7253033 clean up before closing an output

An output can only be closed if there is no lock contention that
 prevents ThreadBase::exit() from being blocked. If an output
 device is waiting for an operation to complete (here a write
 in the remote_submix module, because the pipe is full), signal
 the module that it's entering the "exiting" state.

Change-Id: I8248add60da543e90c25a4c809866cdb26255651
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 45cee0b..49e2b2c 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -682,6 +682,8 @@
                     // check if some effects must be suspended when an effect chain is added
                     void checkSuspendOnAddEffectChain_l(const sp<EffectChain>& chain);
 
+        virtual     void        preExit() { }
+
         friend class AudioFlinger;      // for mEffectChains
 
                     const type_t            mType;
@@ -1050,6 +1052,9 @@
                     // is safe to do so. That will drop the final ref count and destroy the tracks.
         virtual     mixer_state prepareTracks_l(Vector< sp<Track> > *tracksToRemove) = 0;
 
+        // ThreadBase virtuals
+        virtual     void        preExit();
+
 public:
 
         virtual     status_t    initCheck() const { return (mOutput == NULL) ? NO_INIT : NO_ERROR; }