Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4038724a authored by Vinit Deshapnde's avatar Vinit Deshapnde
Browse files

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
parent 105b9b05
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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;