Prevents crash due to timing of when each process is killed
According to our failure analysis, crashes occurred on this line at the rate of 1 per 100, which significantly affected the behavior of Companion Device.
This crash was confirmed to occur when user switch is performed via key fob. So, we added error handling to prevent this crash when a secondary user process is killed by the system when an AIDL method has not finished running.
PIT: 301902990
Bug: 301902990
Change-Id: I7e73f7d9398e02236f6f9b77b33e448737efb2c2
diff --git a/libs/connecteddevice/src/com/google/android/connecteddevice/core/MultiProtocolDeviceController.kt b/libs/connecteddevice/src/com/google/android/connecteddevice/core/MultiProtocolDeviceController.kt
index d590d58..e7f11fc 100644
--- a/libs/connecteddevice/src/com/google/android/connecteddevice/core/MultiProtocolDeviceController.kt
+++ b/libs/connecteddevice/src/com/google/android/connecteddevice/core/MultiProtocolDeviceController.kt
@@ -18,6 +18,7 @@
import android.content.Context
import android.database.sqlite.SQLiteCantOpenDatabaseException
import android.os.ParcelUuid
+import android.os.RemoteException
import androidx.annotation.GuardedBy
import androidx.annotation.VisibleForTesting
import com.google.android.connecteddevice.api.IAssociationCallback
@@ -203,7 +204,11 @@
}
for (protocol in protocolDelegate.protocols) {
val discoveryCallback = generateConnectionDiscoveryCallback(deviceId, protocol, challenge)
- protocol.startConnectionDiscovery(ParcelUuid(deviceId), challenge, discoveryCallback)
+ try {
+ protocol.startConnectionDiscovery(ParcelUuid(deviceId), challenge, discoveryCallback)
+ } catch (e: RemoteException) {
+ loge(TAG, "User process killed while running startConnectionDiscovery.", e)
+ }
}
}