summaryrefslogtreecommitdiff
path: root/services/robotests/backup
diff options
context:
space:
mode:
author Joël Stemmer <jstemmer@google.com> 2024-05-14 11:55:36 +0100
committer Joël Stemmer <jstemmer@google.com> 2024-05-14 11:55:36 +0100
commit93f1ed2a0aa1e332a29feb1ea90a788097f85f60 (patch)
treef1941e3c05e23e8c2aedebd0e2c8a6a2121c0b66 /services/robotests/backup
parent55f19502fe62a5b76c0236b2c8df69d5debbb7b6 (diff)
Catch and ignore `IllegalArgumentException` thrown by `unbindService`
When `TransportConnection` handles `onServiceConnected` or `onBindingDied` it calls `Context.unbindService`. In a very small number of cases this fails because the connection is not (or no longer?) registered. When this happens, the system server crashes causing the device to reboot. We don't really care if the service is not registered when we try to unbind it, so we just catch and ignore the exception to avoid crashing the system server. Bug: 335547110 Test: atest TransportConnectionTest.java Change-Id: Ic7f34eacd1f621c42a68128ef992043dba6808f1
Diffstat (limited to 'services/robotests/backup')
-rw-r--r--services/robotests/backup/src/com/android/server/backup/transport/TransportConnectionTest.java13
1 files changed, 13 insertions, 0 deletions
diff --git a/services/robotests/backup/src/com/android/server/backup/transport/TransportConnectionTest.java b/services/robotests/backup/src/com/android/server/backup/transport/TransportConnectionTest.java
index 6a82f1656414..3e87c6fe7be7 100644
--- a/services/robotests/backup/src/com/android/server/backup/transport/TransportConnectionTest.java
+++ b/services/robotests/backup/src/com/android/server/backup/transport/TransportConnectionTest.java
@@ -28,6 +28,7 @@ import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -543,6 +544,18 @@ public class TransportConnectionTest {
return future.get();
}
+ @Test
+ public void onBindingDied_referenceLost_doesNotThrow() {
+ TransportConnection.TransportConnectionMonitor transportConnectionMonitor =
+ new TransportConnection.TransportConnectionMonitor(
+ mContext, /* transportConnection= */ null);
+ doThrow(new IllegalArgumentException("Service not registered")).when(
+ mContext).unbindService(any());
+
+ // Test no exception is thrown
+ transportConnectionMonitor.onBindingDied(mTransportComponent);
+ }
+
private ServiceConnection verifyBindServiceAsUserAndCaptureServiceConnection(Context context) {
ArgumentCaptor<ServiceConnection> connectionCaptor =
ArgumentCaptor.forClass(ServiceConnection.class);