Snap for 4728508 from 751673a674379f856aa4311d0d8fc3cab31d038c to pi-release

Change-Id: Ia7399a7ca8c3e659457bdc8a60a4be05a7222078
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index b5e2958..d08ff39 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -1451,6 +1451,7 @@
             if ((mConnectionProperties & Connection.PROPERTY_IS_RTT) ==
                     Connection.PROPERTY_IS_RTT) {
                 createRttStreams();
+                mWasEverRtt = true;
                 if (isEmergencyCall()) {
                     mCallsManager.setAudioRoute(CallAudioState.ROUTE_SPEAKER, null);
                     mCallsManager.mute(false);
@@ -2593,7 +2594,6 @@
         if (!areRttStreamsInitialized()) {
             Log.i(this, "Initializing RTT streams");
             try {
-                mWasEverRtt = true;
                 mInCallToConnectionServiceStreams = ParcelFileDescriptor.createReliablePipe();
                 mConnectionServiceToInCallStreams = ParcelFileDescriptor.createReliablePipe();
             } catch (IOException e) {
diff --git a/src/com/android/server/telecom/ServiceBinder.java b/src/com/android/server/telecom/ServiceBinder.java
index f7844b4..f15570b 100644
--- a/src/com/android/server/telecom/ServiceBinder.java
+++ b/src/com/android/server/telecom/ServiceBinder.java
@@ -303,6 +303,7 @@
             mIsBindingAborted = true;
         } else {
             logServiceDisconnected("unbind");
+            unlinkDeathRecipient();
             mContext.unbindService(mServiceConnection);
             mServiceConnection = null;
             setBinder(null);
@@ -371,9 +372,25 @@
      * Handles a service disconnection.
      */
     private void handleServiceDisconnected() {
+        unlinkDeathRecipient();
         setBinder(null);
     }
 
+    /**
+     * Handles un-linking the death recipient from the service's binder.
+     */
+    private void unlinkDeathRecipient() {
+        if (mServiceDeathRecipient != null && mBinder != null) {
+            boolean unlinked = mBinder.unlinkToDeath(mServiceDeathRecipient, 0);
+            if (!unlinked) {
+                Log.i(this, "unlinkDeathRecipient: failed to unlink %s", mComponentName);
+            }
+            mServiceDeathRecipient = null;
+        } else {
+            Log.w(this, "unlinkDeathRecipient: death recipient is null.");
+        }
+    }
+
     private void clearAbort() {
         mIsBindingAborted = false;
     }