From 3759c1623dd13f65482526382d6008718636a2a4 Mon Sep 17 00:00:00 2001 From: Shuzhen Wang Date: Wed, 17 Mar 2021 16:46:33 -0700 Subject: Camera: Fix a removal-while-iterate bug The onStatusChangedLocked removes entries from the ArrayMap. Needs to iterate in the reverse order. Test: Vendor testing Bug: 182876702 Change-Id: I5891f24a25c83f096d23ca5675126889a7d2a61c --- core/java/android/hardware/camera2/CameraManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'core') diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index 7f834afd7b30..933dee3a6470 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -2024,7 +2024,9 @@ public final class CameraManager { // Tell listeners that the cameras and torch modes are unavailable and schedule a // reconnection to camera service. When camera service is reconnected, the camera // and torch statuses will be updated. - for (int i = 0; i < mDeviceStatus.size(); i++) { + // Iterate from the end to the beginning befcause onStatusChangedLocked removes + // entries from the ArrayMap. + for (int i = mDeviceStatus.size() - 1; i >= 0; i--) { String cameraId = mDeviceStatus.keyAt(i); onStatusChangedLocked(ICameraServiceListener.STATUS_NOT_PRESENT, cameraId); } -- cgit v1.2.3