Get rid of a race in NsdService in stopResolveService and getAddrInfo
Both requests are made using same id; and there is a chance that stopResolve() is not fully completed when getAddrInfo() is issued. That results getAddrInfo() failure, because both are using same requestId. This change fixes this problem by creating a new unique id to call getAddrInfo() with. Bug: 11597153 Change-Id: I56bd78740e8a40bd31c52705dc797486aff53a50
This commit is contained in:
@@ -483,10 +483,14 @@ public class NsdService extends INsdManager.Stub {
|
|||||||
clientInfo.mResolvedService.setPort(Integer.parseInt(cooked[4]));
|
clientInfo.mResolvedService.setPort(Integer.parseInt(cooked[4]));
|
||||||
|
|
||||||
stopResolveService(id);
|
stopResolveService(id);
|
||||||
if (!getAddrInfo(id, cooked[3])) {
|
removeRequestMap(clientId, id, clientInfo);
|
||||||
|
|
||||||
|
int id2 = getUniqueId();
|
||||||
|
if (getAddrInfo(id2, cooked[3])) {
|
||||||
|
storeRequestMap(clientId, id2, clientInfo);
|
||||||
|
} else {
|
||||||
clientInfo.mChannel.sendMessage(NsdManager.RESOLVE_SERVICE_FAILED,
|
clientInfo.mChannel.sendMessage(NsdManager.RESOLVE_SERVICE_FAILED,
|
||||||
NsdManager.FAILURE_INTERNAL_ERROR, clientId);
|
NsdManager.FAILURE_INTERNAL_ERROR, clientId);
|
||||||
removeRequestMap(clientId, id, clientInfo);
|
|
||||||
clientInfo.mResolvedService = null;
|
clientInfo.mResolvedService = null;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user