diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsConfigs.java b/service-t/src/com/android/server/connectivity/mdns/MdnsConfigs.java index 761c4772fd..f5e7790a30 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsConfigs.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsConfigs.java @@ -51,7 +51,7 @@ public class MdnsConfigs { } public static boolean useSessionIdToScheduleMdnsTask() { - return false; + return true; } public static boolean shouldCancelScanTaskWhenFutureIsNull() { diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java b/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java index 14302c2d8d..49a376c558 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java @@ -191,14 +191,14 @@ public class MdnsServiceTypeClient { } // Cancel the next scheduled periodical task. if (requestTaskFuture != null) { - requestTaskFuture.cancel(true); + cancelRequestTaskLocked(); } // Keep tracking the ScheduledFuture for the task so we can cancel it if caller is not // interested anymore. final QueryTaskConfig taskConfig = new QueryTaskConfig( searchOptions.getSubtypes(), searchOptions.isPassiveMode(), - ++currentSessionId, + currentSessionId, network); if (hadReply) { requestTaskFuture = scheduleNextRunLocked(taskConfig); @@ -208,6 +208,13 @@ public class MdnsServiceTypeClient { } } + @GuardedBy("lock") + private void cancelRequestTaskLocked() { + requestTaskFuture.cancel(true); + ++currentSessionId; + requestTaskFuture = null; + } + private boolean responseMatchesOptions(@NonNull MdnsResponse response, @NonNull MdnsSearchOptions options) { final boolean matchesInstanceName = options.getResolveInstanceName() == null @@ -241,8 +248,7 @@ public class MdnsServiceTypeClient { return listeners.isEmpty(); } if (listeners.isEmpty() && requestTaskFuture != null) { - requestTaskFuture.cancel(true); - requestTaskFuture = null; + cancelRequestTaskLocked(); } return listeners.isEmpty(); } @@ -319,8 +325,7 @@ public class MdnsServiceTypeClient { } if (requestTaskFuture != null) { - requestTaskFuture.cancel(true); - requestTaskFuture = null; + cancelRequestTaskLocked(); } } } diff --git a/tests/unit/java/com/android/server/connectivity/mdns/MdnsServiceTypeClientTests.java b/tests/unit/java/com/android/server/connectivity/mdns/MdnsServiceTypeClientTests.java index b9fdf184da..d1adecfb91 100644 --- a/tests/unit/java/com/android/server/connectivity/mdns/MdnsServiceTypeClientTests.java +++ b/tests/unit/java/com/android/server/connectivity/mdns/MdnsServiceTypeClientTests.java @@ -379,9 +379,7 @@ public class MdnsServiceTypeClientTests { } @Test - @Ignore("MdnsConfigs is not configurable currently.") public void testIfPreviousTaskIsCanceledWhenNewSessionStarts() { - //MdnsConfigsFlagsImpl.useSessionIdToScheduleMdnsTask.override(true); MdnsSearchOptions searchOptions = MdnsSearchOptions.newBuilder().addSubtype("12345").setIsPassiveMode(true).build(); client.startSendAndReceive(mockListenerOne, searchOptions);