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

Commit 1ff9e7ae authored by Daniel Moore's avatar Daniel Moore Committed by Peng Xu
Browse files

sensors: fix concurrent modification exception



The sensor listener can be removed in unregisterListener
inside of the for loop.  This change makes a copy of the
listeners and iterates over the copy.

Test: builds
Bug: 37543280
Change-Id: Ie9b7b9afb6994d9627f67c4b3bfbdfb305f5583e
Signed-off-by: default avatarDaniel Moore <dtmoore916@gmail.com>
parent 6a08dfab
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -322,7 +322,10 @@ public class SystemSensorManager extends SensorManager {

        if (sensor.getReportingMode() == Sensor.REPORTING_MODE_ONE_SHOT) {
            synchronized(mTriggerListeners) {
                for (TriggerEventListener l: mTriggerListeners.keySet()) {
                HashMap<TriggerEventListener, TriggerEventQueue> triggerListeners =
                    new HashMap<TriggerEventListener, TriggerEventQueue>(mTriggerListeners);

                for (TriggerEventListener l: triggerListeners.keySet()) {
                    if (DEBUG_DYNAMIC_SENSOR){
                        Log.i(TAG, "removed trigger listener" + l.toString() +
                                   " due to sensor disconnection");
@@ -332,7 +335,10 @@ public class SystemSensorManager extends SensorManager {
            }
        } else {
            synchronized(mSensorListeners) {
                for (SensorEventListener l: mSensorListeners.keySet()) {
                HashMap<SensorEventListener, SensorEventQueue> sensorListeners =
                    new HashMap<SensorEventListener, SensorEventQueue>(mSensorListeners);

                for (SensorEventListener l: sensorListeners.keySet()) {
                    if (DEBUG_DYNAMIC_SENSOR){
                        Log.i(TAG, "removed event listener" + l.toString() +
                                   " due to sensor disconnection");