diff --git a/services/core/java/com/android/server/biometrics/AuthenticationClient.java b/services/core/java/com/android/server/biometrics/AuthenticationClient.java index edc8f15a9a03c..ef1b574c29a8d 100644 --- a/services/core/java/com/android/server/biometrics/AuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/AuthenticationClient.java @@ -221,6 +221,9 @@ public abstract class AuthenticationClient extends ClientMonitor { } } result = lockoutMode != LOCKOUT_NONE; // in a lockout mode + if(result) { // locked out + mAlreadyDone = true; + } } } catch (RemoteException e) { Slog.e(getLogTag(), "Remote exception", e); diff --git a/services/core/java/com/android/server/biometrics/ClientMonitor.java b/services/core/java/com/android/server/biometrics/ClientMonitor.java index b029695242215..846beb0163631 100644 --- a/services/core/java/com/android/server/biometrics/ClientMonitor.java +++ b/services/core/java/com/android/server/biometrics/ClientMonitor.java @@ -237,6 +237,10 @@ public abstract class ClientMonitor extends LoggableMonitor implements IBinder.D } void binderDiedInternal(boolean clearListener) { + if (isAlreadyDone()) { + Slog.w(getLogTag(), "Binder died but client is finished, ignoring"); + return; + } // If the current client dies we should cancel the current operation. Slog.e(getLogTag(), "Binder died, cancelling client"); stop(false /* initiatedByClient */);