Fix a memory leak in ConnectivityManager.
Remove callbacks from the internal storage when they are being unregistered.
Change-Id: Ia42ed7aefaebd8caf3eada8e42b6cb7a940d7647
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index a025337..5d008e3 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -2734,7 +2734,7 @@
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 @@
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
+
+ synchronized (sNetworkCallback) {
+ sNetworkCallback.remove(networkCallback.networkRequest);
+ }
}
/**