OSDN Git Service

Make RankingHelper$Record.groups thread-safe
authorShunta Sato <shunta.sato@sonymobile.com>
Tue, 13 Jun 2017 07:16:13 +0000 (16:16 +0900)
committerJulia Reynolds <juliacr@google.com>
Wed, 14 Jun 2017 14:44:50 +0000 (10:44 -0400)
commit642b8d4d8f1ecd5612fcde0913cd9d295c6996f6
tree120b736d8b97046a485ed64238d476e8e2bb6dee
parentd27d5d9ea8cd50d82d0cc9d332439535da1c1962
Make RankingHelper$Record.groups thread-safe

Symptom:
System crash is happened due to NPE at RankingHelper.writeXml.

Root cause:
RankingHelper$Record.groups.values() returned null. Record.groups
is an ArrayMap and this is not thread-safe. When multiple clients
call NotificationManager#createNotificationChannelGroup and
deleteNotificationChannelGroup at a same time, Record.groups is
changed by multiple threads simultaneously. As a result, this
ArrayMap object gets broken.

Solution:
Use ConcurrentHashMap instead of ArrayMap.

Test: runtest systemui-notification, test app
Bug: 62557189
Author: Tetsutoki Shiozawa <tetsutoki.shiozawa@sony.com>
Change-Id: I2261dbd1ace4915695528595b9d14d68e5bec55d
services/core/java/com/android/server/notification/RankingHelper.java