From 662a01236a9a84a73778c78e5571a7d1bafc024b Mon Sep 17 00:00:00 2001 From: Ryuki Nakamura Date: Wed, 1 Mar 2017 10:40:36 +0900 Subject: [PATCH] Fix NPE while performing NetworkStatsService.removeUidsLocked() Symptom: NPE occurred while performing NetworkStatsService.removeUidsLocked(). Root cause: NetworkStatsService refers to mUidRecorder at NetworkStatsService.removeUidsLocked() when mUserReceiver received Intent.ACTION_USER_REMOVED. However NetworkStatsService sets mUidRecorder to null without unregistering mUserReceiver when mShutdownReceiver received Intent.ACTION_SHUTDOWN. Therefore NPE occurred when mUserReceiver received Intent.ACTION_USER_REMOVED after mShutdownReceiver received Intent.ACTION_SHUTDOWN. Solution: Unregister mUserReceiver before setting mUidRecorder to null when mShutdownReceiver received Intent.ACTION_SHUTDOWN. Bug: 36015339 Change-Id: I9279e4c6ae07d94e7ec519c40b2d973c84d8fef1 --- .../core/java/com/android/server/net/NetworkStatsService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java index 4658c0463f..060dd73d11 100644 --- a/services/core/java/com/android/server/net/NetworkStatsService.java +++ b/services/core/java/com/android/server/net/NetworkStatsService.java @@ -381,6 +381,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { mContext.unregisterReceiver(mTetherReceiver); mContext.unregisterReceiver(mPollReceiver); mContext.unregisterReceiver(mRemovedReceiver); + mContext.unregisterReceiver(mUserReceiver); mContext.unregisterReceiver(mShutdownReceiver); final long currentTime = mTime.hasCache() ? mTime.currentTimeMillis()