From 728081f9bbd502a45bca1d0740ed85ab4c2f9964 Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Wed, 19 May 2021 12:56:43 +0800 Subject: [PATCH] Fix NullPointerException at VolumeSliceHelper Race condition happens on accessing a map while system is destroying it. Test: manual, robotest Fixes: 188114877 Change-Id: I245121b95d1d4db02e3107a47c6d3ae13a5d32e5 --- .../settings/slices/VolumeSliceHelper.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/slices/VolumeSliceHelper.java b/src/com/android/settings/slices/VolumeSliceHelper.java index bcf02e50d7f..5e43b869b0c 100644 --- a/src/com/android/settings/slices/VolumeSliceHelper.java +++ b/src/com/android/settings/slices/VolumeSliceHelper.java @@ -111,17 +111,21 @@ public class VolumeSliceHelper { private static void handleStreamChanged(Context context, Intent intent) { final int inputType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1); - for (Map.Entry entry : sRegisteredUri.entrySet()) { - if (entry.getValue() == inputType) { - context.getContentResolver().notifyChange(entry.getKey(), null /* observer */); - break; + synchronized (sRegisteredUri) { + for (Map.Entry entry : sRegisteredUri.entrySet()) { + if (entry.getValue() == inputType) { + context.getContentResolver().notifyChange(entry.getKey(), null /* observer */); + break; + } } } } private static void notifyAllStreamsChanged(Context context) { - sRegisteredUri.forEach((uri, audioStream) -> { - context.getContentResolver().notifyChange(uri, null /* observer */); - }); + synchronized (sRegisteredUri) { + sRegisteredUri.forEach((uri, audioStream) -> { + context.getContentResolver().notifyChange(uri, null /* observer */); + }); + } } }