From 66d9bd8806f9a53fcf9b11f2e5bb8f593ea782ac Mon Sep 17 00:00:00 2001 From: Pierre Imai Date: Fri, 19 Feb 2016 16:26:01 +0900 Subject: [PATCH] Fix a memory leak in ConnectivityManager. Remove callbacks from the internal storage when they are being unregistered. Change-Id: Ia42ed7aefaebd8caf3eada8e42b6cb7a940d7647 --- core/java/android/net/ConnectivityManager.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index a025337922..5d008e3c8d 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -2734,7 +2734,7 @@ public class ConnectivityManager { private void incCallbackHandlerRefCount() { synchronized(sCallbackRefCount) { if (sCallbackRefCount.incrementAndGet() == 1) { - // TODO - switch this over to a ManagerThread or expire it when done + // TODO: switch this to ConnectivityThread HandlerThread callbackThread = new HandlerThread("ConnectivityManager"); callbackThread.start(); sCallbackHandler = new CallbackHandler(callbackThread.getLooper(), @@ -3093,6 +3093,10 @@ public class ConnectivityManager { } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } + + synchronized (sNetworkCallback) { + sNetworkCallback.remove(networkCallback.networkRequest); + } } /**