diff options
| author | 2023-04-13 14:22:14 +0000 | |
|---|---|---|
| committer | 2023-04-13 14:42:16 +0000 | |
| commit | a63b22c0b8ec4e0aa6ce82eeee1efa41d56af36c (patch) | |
| tree | 1091f6576ebff0b4700beb78d946e04195289591 | |
| parent | 844c5aec4826d6e12e6f25546a2cdd5b73205f2c (diff) | |
Avoid likely deadlock in the calltree under alarm manager
by switching execution thread here in Fingerprint Service
Bug: 273440002
Test: Manuelly by introducing lockout on a hidl fps sensor device (e.g. Sunfish)
Change-Id: I7e5c759825048183c561c830ed198d5a7b169d3d
| -rw-r--r-- | services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl.java | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl.java index a0befea8e085..36d56c8a1544 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl.java @@ -24,6 +24,8 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.os.Handler; +import android.os.Looper; import android.os.SystemClock; import android.util.Slog; import android.util.SparseBooleanArray; @@ -69,6 +71,7 @@ public class LockoutFrameworkImpl implements LockoutTracker { private final SparseIntArray mFailedAttempts; private final AlarmManager mAlarmManager; private final LockoutReceiver mLockoutReceiver; + private final Handler mHandler; public LockoutFrameworkImpl(Context context, LockoutResetCallback lockoutResetCallback) { mContext = context; @@ -77,6 +80,7 @@ public class LockoutFrameworkImpl implements LockoutTracker { mFailedAttempts = new SparseIntArray(); mAlarmManager = context.getSystemService(AlarmManager.class); mLockoutReceiver = new LockoutReceiver(); + mHandler = new Handler(Looper.getMainLooper()); context.registerReceiver(mLockoutReceiver, new IntentFilter(ACTION_LOCKOUT_RESET), RESET_FINGERPRINT_LOCKOUT, null /* handler */, Context.RECEIVER_EXPORTED); @@ -127,9 +131,11 @@ public class LockoutFrameworkImpl implements LockoutTracker { } private void scheduleLockoutResetForUser(int userId) { - mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mHandler.post(() -> { + mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + FAIL_LOCKOUT_TIMEOUT_MS, getLockoutResetIntentForUser(userId)); + }); } private PendingIntent getLockoutResetIntentForUser(int userId) { |