From 4038724a536c990859866489195add7ed537006b Mon Sep 17 00:00:00 2001 From: Vinit Deshapnde Date: Tue, 12 Nov 2013 15:36:37 -0800 Subject: 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 --- services/java/com/android/server/NsdService.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'services/java/com/android/server') diff --git a/services/java/com/android/server/NsdService.java b/services/java/com/android/server/NsdService.java index e0f415b..16d2468 100644 --- a/services/java/com/android/server/NsdService.java +++ b/services/java/com/android/server/NsdService.java @@ -483,10 +483,14 @@ public class NsdService extends INsdManager.Stub { clientInfo.mResolvedService.setPort(Integer.parseInt(cooked[4])); 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, NsdManager.FAILURE_INTERNAL_ERROR, clientId); - removeRequestMap(clientId, id, clientInfo); clientInfo.mResolvedService = null; } break; -- cgit v1.1