Fix enumerate corner case
Do not post reset runnable when another client is requested while
cleanup is happening. The runnable will be "pending" and started once
cleanup finishes instead.
Fixes: 129534163
Test: Based on logs in the bug, this is reasonable
Test: reboot device, fingerprint still works
Change-Id: I766cc04be151abaae60a0092f71fd7a3acf3397a
Merged-In: I766cc04be151abaae60a0092f71fd7a3acf3397a
(cherry picked from commit ea80d17cb6)
This commit is contained in:
@@ -1045,10 +1045,15 @@ public abstract class BiometricServiceBase extends SystemService
|
||||
}
|
||||
} else {
|
||||
currentClient.stop(initiatedByClient);
|
||||
|
||||
// Only post the reset runnable for non-cleanup clients. Cleanup clients should
|
||||
// never be forcibly stopped since they ensure synchronization between HAL and
|
||||
// framework. Thus, we should instead just start the pending client once cleanup
|
||||
// finishes instead of using the reset runnable.
|
||||
mHandler.removeCallbacks(mResetClientState);
|
||||
mHandler.postDelayed(mResetClientState, CANCEL_TIMEOUT_LIMIT);
|
||||
}
|
||||
mPendingClient = newClient;
|
||||
mHandler.removeCallbacks(mResetClientState);
|
||||
mHandler.postDelayed(mResetClientState, CANCEL_TIMEOUT_LIMIT);
|
||||
} else if (newClient != null) {
|
||||
// For BiometricPrompt clients, do not start until
|
||||
// <Biometric>Service#startPreparedClient is called. BiometricService waits until all
|
||||
@@ -1225,6 +1230,7 @@ public abstract class BiometricServiceBase extends SystemService
|
||||
} else {
|
||||
clearEnumerateState();
|
||||
if (mPendingClient != null) {
|
||||
Slog.d(getTag(), "Enumerate finished, starting pending client");
|
||||
startClient(mPendingClient, false /* initiatedByClient */);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user