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
This commit is contained in:
Hugo Benichi
2016-07-07 09:36:12 +09:00
parent 833c839f0b
commit f778e2546f

View File

@@ -3103,14 +3103,11 @@ public class ConnectivityManager {
throw new IllegalArgumentException("Invalid NetworkCallback"); throw new IllegalArgumentException("Invalid NetworkCallback");
} }
try { try {
// CallbackHandler will release callback when receiving CALLBACK_RELEASED.
mService.releaseNetworkRequest(networkCallback.networkRequest); mService.releaseNetworkRequest(networkCallback.networkRequest);
} catch (RemoteException e) { } catch (RemoteException e) {
throw e.rethrowFromSystemServer(); throw e.rethrowFromSystemServer();
} }
synchronized (sNetworkCallback) {
sNetworkCallback.remove(networkCallback.networkRequest);
}
} }
/** /**