diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index 0635a3cf1b..70b9b71caf 100755 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -1703,7 +1703,7 @@ public class ConnectivityService extends IConnectivityManager.Stub mUserAllContext.registerReceiver(mPackageIntentReceiver, packageIntentFilter, null /* broadcastPermission */, mHandler); - mNetworkActivityTracker = new LegacyNetworkActivityTracker(mContext, mNetd); + mNetworkActivityTracker = new LegacyNetworkActivityTracker(mContext, mNetd, mHandler); final NetdCallback netdCallback = new NetdCallback(); try { @@ -11120,6 +11120,7 @@ public class ConnectivityService extends IConnectivityManager.Stub private static final int NO_UID = -1; private final Context mContext; private final INetd mNetd; + private final Handler mHandler; private final RemoteCallbackList mNetworkActivityListeners = new RemoteCallbackList<>(); // Indicate the current system default network activity is active or not. @@ -11138,12 +11139,22 @@ public class ConnectivityService extends IConnectivityManager.Stub } } - LegacyNetworkActivityTracker(@NonNull Context context, @NonNull INetd netd) { + LegacyNetworkActivityTracker(@NonNull Context context, @NonNull INetd netd, + @NonNull Handler handler) { mContext = context; mNetd = netd; + mHandler = handler; + } + + private void ensureRunningOnConnectivityServiceThread() { + if (mHandler.getLooper().getThread() != Thread.currentThread()) { + throw new IllegalStateException("Not running on ConnectivityService thread: " + + Thread.currentThread().getName()); + } } public void handleReportNetworkActivity(NetworkActivityParams activityParams) { + ensureRunningOnConnectivityServiceThread(); sendDataActivityBroadcast(transportTypeToLegacyType(activityParams.label), activityParams.isActive, activityParams.timestampNs); synchronized (mActiveIdleTimers) { @@ -11304,6 +11315,7 @@ public class ConnectivityService extends IConnectivityManager.Stub */ public void updateDataActivityTracking(NetworkAgentInfo newNetwork, NetworkAgentInfo oldNetwork) { + ensureRunningOnConnectivityServiceThread(); if (newNetwork != null) { setupDataActivityTracking(newNetwork); }