Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea80d17c authored by Kevin Chyn's avatar Kevin Chyn
Browse files

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
parent d6ecaf06
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -1044,10 +1044,15 @@ public abstract class BiometricServiceBase extends SystemService
                }
            } else {
                currentClient.stop(initiatedByClient);
            }
            mPendingClient = newClient;

                // 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;
        } else if (newClient != null) {
            // For BiometricPrompt clients, do not start until
            // <Biometric>Service#startPreparedClient is called. BiometricService waits until all
@@ -1224,6 +1229,7 @@ public abstract class BiometricServiceBase extends SystemService
        } else {
            clearEnumerateState();
            if (mPendingClient != null) {
                Slog.d(getTag(), "Enumerate finished, starting pending client");
                startClient(mPendingClient, false /* initiatedByClient */);
            }
        }