From f778e2546fb69b6a057073d7858c0a17a58c7b8e Mon Sep 17 00:00:00 2001 From: Hugo Benichi Date: Thu, 7 Jul 2016 09:36:12 +0900 Subject: [PATCH] ConnectivityManager: no double callback remove This patch partially undoes ag/869831 (Change-Id: Ia42ed7aefaebd8caf3eada8e42b6cb7a940d7647) so that ConnectivityManager does not remove callbacks from its internal request-to-callback map at unregistration, but instead let the singleton CallbackHandler do it when receiving a CALLBACK_RELEASED from ConnectivityService. ag/869831 was thought to fix b/26749700 that reported a callback leak from sNetworkCallback, but a finer analysis of the code shows that callbacks were correctly removed by the CallbackHandler before ag/869831. There was therefore no callback leak. Bug: 26749700 Bug: 28537383 Change-Id: I421d889d0e225c0e3d1eebea664f44a1cc0f3191 --- core/java/android/net/ConnectivityManager.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index a45e6f51d8..8d4137957b 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -3103,14 +3103,11 @@ public class ConnectivityManager { throw new IllegalArgumentException("Invalid NetworkCallback"); } try { + // CallbackHandler will release callback when receiving CALLBACK_RELEASED. mService.releaseNetworkRequest(networkCallback.networkRequest); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } - - synchronized (sNetworkCallback) { - sNetworkCallback.remove(networkCallback.networkRequest); - } } /**