Fix incorrect "listener no longer active" errors

Was incorrectly using .indexOfValue to search for Integer objects in the
client map.

Change-Id: I54e2e1725e0fff0a7d35a22376714cc8266a9eee
This commit is contained in:
Christopher Lane
2014-04-25 18:39:07 -07:00
parent 0cc4425b3b
commit 7441122e23

View File

@@ -421,11 +421,8 @@ public class NsdService extends INsdManager.Stub {
}
/* This goes in response as msg.arg2 */
int clientId = -1;
int keyId = clientInfo.mClientIds.indexOfValue(id);
if (keyId != -1) {
clientId = clientInfo.mClientIds.keyAt(keyId);
} else {
int clientId = clientInfo.getClientId(id);
if (clientId < 0) {
// This can happen because of race conditions. For example,
// SERVICE_FOUND may race with STOP_SERVICE_DISCOVERY,
// and we may get in this situation.
@@ -904,5 +901,18 @@ public class NsdService extends INsdManager.Stub {
mClientRequests.clear();
}
// mClientIds is a sparse array of listener id -> mDnsClient id. For a given mDnsClient id,
// return the corresponding listener id. mDnsClient id is also called a global id.
private int getClientId(final int globalId) {
// This doesn't use mClientIds.indexOfValue because indexOfValue uses == (not .equals)
// while also coercing the int primitives to Integer objects.
for (int i = 0, nSize = mClientIds.size(); i < nSize; i++) {
int mDnsId = mClientIds.valueAt(i);
if (globalId == mDnsId) {
return mClientIds.keyAt(i);
}
}
return -1;
}
}
}