diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java b/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java index 36fad31746..4c760d6d18 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java @@ -101,7 +101,7 @@ public class MdnsMultinetworkSocketClient implements MdnsSocketClientBase { @NonNull MdnsInterfaceSocket socket) { mActiveSockets.remove(socketKey); mSocketCreationCallback.onSocketDestroyed(socketKey); - maybeCleanupPacketHandler(socketKey); + maybeCleanupPacketHandler(socketKey, socket); } private void notifySocketDestroyed(@NonNull SocketKey socketKey) { @@ -115,8 +115,9 @@ public class MdnsMultinetworkSocketClient implements MdnsSocketClientBase { for (int i = mActiveSockets.size() - 1; i >= 0; i--) { // Iterate from the end so the socket can be removed final SocketKey socketKey = mActiveSockets.keyAt(i); + final MdnsInterfaceSocket socket = mActiveSockets.valueAt(i); notifySocketDestroyed(socketKey); - maybeCleanupPacketHandler(socketKey); + maybeCleanupPacketHandler(socketKey, socket); } } } @@ -143,9 +144,13 @@ public class MdnsMultinetworkSocketClient implements MdnsSocketClientBase { return null; } - private void maybeCleanupPacketHandler(@NonNull SocketKey socketKey) { + private void maybeCleanupPacketHandler(@NonNull SocketKey socketKey, + @NonNull MdnsInterfaceSocket socket) { if (isSocketActive(socketKey)) return; - mSocketPacketHandlers.remove(socketKey); + final ReadPacketHandler handler = mSocketPacketHandlers.remove(socketKey); + if (handler != null) { + socket.removePacketHandler(handler); + } } private class ReadPacketHandler implements MulticastPacketReader.PacketHandler { diff --git a/tests/unit/java/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClientTest.java b/tests/unit/java/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClientTest.java index 4c71991474..e115d5a882 100644 --- a/tests/unit/java/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClientTest.java +++ b/tests/unit/java/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClientTest.java @@ -357,6 +357,8 @@ public class MdnsMultinetworkSocketClientTest { verify(mProvider).unrequestSocket(callback); verify(mSocketCreationCallback).onSocketDestroyed(mSocketKey); verify(mSocketCreationCallback).onSocketDestroyed(otherSocketKey); + verify(mSocket).removePacketHandler(any()); + verify(otherSocket).removePacketHandler(any()); } @Test @@ -375,8 +377,10 @@ public class MdnsMultinetworkSocketClientTest { // Notify socket destroyed callback.onInterfaceDestroyed(mSocketKey, mSocket); verify(mSocketCreationCallback).onSocketDestroyed(mSocketKey); + verify(mSocket).removePacketHandler(any()); callback.onInterfaceDestroyed(otherSocketKey, otherSocket); verify(mSocketCreationCallback).onSocketDestroyed(otherSocketKey); + verify(otherSocket).removePacketHandler(any()); } @Test @@ -413,6 +417,7 @@ public class MdnsMultinetworkSocketClientTest { verify(creationCallback2).onSocketDestroyed(mSocketKey); verify(creationCallback3).onSocketDestroyed(mSocketKey); verify(creationCallback3, never()).onSocketDestroyed(socketKey2); + verify(mSocket).removePacketHandler(any()); } @Test