From 0c1b92192314a5eba892a6f63958acedcde8ce67 Mon Sep 17 00:00:00 2001 From: Catherine Shi Date: Wed, 8 Jul 2020 17:05:24 -0700 Subject: [PATCH] linkToDeath exception cause system server crash java.util.NoSuchElementException: Death link does not exist when linkToDeath has remote exception, unlinkToDeath will fail and throw NoSuchElementException, catch it in AbstractAccessibilityServiceConnection to avoid system server crash. Bug: 157580692 Test: manual Change-Id: I42ce3a458e04539d76555679279d1368e0c61ae0 --- diff | 25 +++++++++++++++++++ ...bstractAccessibilityServiceConnection.java | 7 +++++- 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 diff diff --git a/diff b/diff new file mode 100644 index 0000000000000..5c75d88e67896 --- /dev/null +++ b/diff @@ -0,0 +1,25 @@ +diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java +index fc43882..832dc91 100644 +--- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java ++++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java +@@ -67,6 +67,7 @@ import java.util.Arrays; + import java.util.HashSet; + import java.util.List; + import java.util.Set; ++import java.util.NoSuchElementException; + + /** + * This class represents an accessibility client - either an AccessibilityService or a UiAutomation. +@@ -978,7 +979,11 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ + /* ignore */ + } + if (mService != null) { +- mService.unlinkToDeath(this, 0); ++ try { ++ mService.unlinkToDeath(this, 0); ++ }catch(NoSuchElementException e) { ++ Slog.e(LOG_TAG, "Failed unregistering death link"); ++ } + mService = null; + } + diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java index 6b852adce0f13..40a2816ee7de3 100644 --- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java +++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java @@ -90,6 +90,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.NoSuchElementException; import java.util.Set; /** @@ -1179,7 +1180,11 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ /* ignore */ } if (mService != null) { - mService.unlinkToDeath(this, 0); + try { + mService.unlinkToDeath(this, 0); + } catch (NoSuchElementException e) { + Slog.e(LOG_TAG, "Failed unregistering death link"); + } mService = null; }