Make sure callback handler is in place before callbacks handled.

When making Network requests in ConnectivityManager, make sure we install the
callback prior to a response from ConnectivityService arriving causing us to
search for the callback and inadvertently not find it.

bug:15928097
Change-Id: Ie5feb9cc8f5effc19870f54dba07218b2e11d82a
This commit is contained in:
Paul Jensen
2014-06-27 11:05:32 -04:00
parent 693d07a0b4
commit bb427685db

View File

@@ -2208,15 +2208,15 @@ public class ConnectivityManager {
if (need == null) throw new IllegalArgumentException("null NetworkCapabilities");
try {
incCallbackHandlerRefCount();
if (action == LISTEN) {
networkCallback.networkRequest = mService.listenForNetwork(need,
new Messenger(sCallbackHandler), new Binder());
} else {
networkCallback.networkRequest = mService.requestNetwork(need,
new Messenger(sCallbackHandler), timeoutSec, new Binder(), legacyType);
}
if (networkCallback.networkRequest != null) {
synchronized(sNetworkCallback) {
synchronized(sNetworkCallback) {
if (action == LISTEN) {
networkCallback.networkRequest = mService.listenForNetwork(need,
new Messenger(sCallbackHandler), new Binder());
} else {
networkCallback.networkRequest = mService.requestNetwork(need,
new Messenger(sCallbackHandler), timeoutSec, new Binder(), legacyType);
}
if (networkCallback.networkRequest != null) {
sNetworkCallback.put(networkCallback.networkRequest, networkCallback);
}
}