From cf601559d982f5270e48a888a8826b86b8afc2ee Mon Sep 17 00:00:00 2001 From: xshu Date: Thu, 30 Apr 2020 18:58:05 -0700 Subject: Fix WifiLockManager Death link does not exist The cause of the issue is that sometimes WifiLocks are added without linkToDeath working properly. Catches the NoSuchElementException inside WifiLockManager to prevent SystemServer from crashing. Bug: 155240535 Test: atest com.android.server.wifi Change-Id: Id9d56b9da184febef7915eb5281ea39f97e51b06 --- service/java/com/android/server/wifi/WifiLockManager.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'service') diff --git a/service/java/com/android/server/wifi/WifiLockManager.java b/service/java/com/android/server/wifi/WifiLockManager.java index 7bbd3aa2e..7cbeea0d3 100644 --- a/service/java/com/android/server/wifi/WifiLockManager.java +++ b/service/java/com/android/server/wifi/WifiLockManager.java @@ -36,6 +36,7 @@ import com.android.server.wifi.util.WorkSourceUtil; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; +import java.util.NoSuchElementException; /** * WifiLockManager maintains the list of wake locks held by different applications. @@ -189,7 +190,6 @@ public class WifiLockManager { // This is to make sure worksource value can not be changed by caller // after function returns. WorkSource newWorkSource = new WorkSource(ws); - return addLock(new WifiLock(lockMode, tag, binder, newWorkSource)); } @@ -804,6 +804,7 @@ public class WifiLockManager { try { mBinder.linkToDeath(this, 0); } catch (RemoteException e) { + Log.e(TAG, "mBinder.linkToDeath failed: " + e.getMessage()); binderDied(); } } @@ -829,7 +830,11 @@ public class WifiLockManager { } public void unlinkDeathRecipient() { - mBinder.unlinkToDeath(this, 0); + try { + mBinder.unlinkToDeath(this, 0); + } catch (NoSuchElementException e) { + Log.e(TAG, "mBinder.unlinkToDeath failed: " + e.getMessage()); + } } public String toString() { -- cgit v1.2.3