summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorShuzhen Wang <shuzhenwang@google.com>2021-03-17 16:46:33 -0700
committerShuzhen Wang <shuzhenwang@google.com>2021-03-17 16:56:43 -0700
commit3759c1623dd13f65482526382d6008718636a2a4 (patch)
tree0e3e15ab41d011028d524dbe0e84455b6183320a /core/java
parentdfb0754d31c8f2b0d30d4c842759f8e2266e22cb (diff)
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
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/hardware/camera2/CameraManager.java4
1 files changed, 3 insertions, 1 deletions
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);
}