From 71d04218a7066d9b8467d7b717ac2bdab0950fd5 Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Wed, 28 Feb 2018 18:12:03 -0800 Subject: [PATCH] Release wakelock when binder died or exception occurs Fixes: 73862644 Test: manual, fp lockout still behaves as expected Test: manually extend wakelock timeout, kill sysui (adb shell pkill systemui) while wakelock is held; binderDied() log shows Change-Id: Id8abe4ac5b45170cee0f108a274604b89b954505 --- .../server/fingerprint/FingerprintService.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java index 3da35517faf09..c3259c312cd79 100644 --- a/services/core/java/com/android/server/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java @@ -941,9 +941,7 @@ public class FingerprintService extends SystemService implements IHwBinder.Death @Override public void sendResult(Bundle data) throws RemoteException { - if (mWakeLock.isHeld()) { - mWakeLock.release(); - } + releaseWakelock(); } }); } catch (DeadObjectException e) { @@ -951,6 +949,7 @@ public class FingerprintService extends SystemService implements IHwBinder.Death mHandler.post(mRemoveCallbackRunnable); } catch (RemoteException e) { Slog.w(TAG, "Failed to invoke onLockoutReset: ", e); + releaseWakelock(); } } } @@ -958,9 +957,7 @@ public class FingerprintService extends SystemService implements IHwBinder.Death private final Runnable mRemoveCallbackRunnable = new Runnable() { @Override public void run() { - if (mWakeLock.isHeld()) { - mWakeLock.release(); - } + releaseWakelock(); removeLockoutResetCallback(FingerprintServiceLockoutResetMonitor.this); } }; @@ -970,6 +967,12 @@ public class FingerprintService extends SystemService implements IHwBinder.Death Slog.e(TAG, "Lockout reset callback binder died"); mHandler.post(mRemoveCallbackRunnable); } + + private void releaseWakelock() { + if (mWakeLock.isHeld()) { + mWakeLock.release(); + } + } } private IBiometricsFingerprintClientCallback mDaemonCallback =