From 5be499887d860bd703d7cf4fff604bab9c6e3a68 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 16 Sep 2014 19:17:25 -0700 Subject: [PATCH] Fix a resource leak that was causing Limelight-Embedded to hang instead of exiting after using mDNS discovery --- .../nvstream/mdns/MdnsDiscoveryAgent.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/moonlight-common/src/com/limelight/nvstream/mdns/MdnsDiscoveryAgent.java b/moonlight-common/src/com/limelight/nvstream/mdns/MdnsDiscoveryAgent.java index 726b0ea6..8b7d6b59 100644 --- a/moonlight-common/src/com/limelight/nvstream/mdns/MdnsDiscoveryAgent.java +++ b/moonlight-common/src/com/limelight/nvstream/mdns/MdnsDiscoveryAgent.java @@ -26,6 +26,7 @@ public class MdnsDiscoveryAgent { private Timer discoveryTimer; private MdnsDiscoveryListener listener; private HashSet pendingResolution; + private boolean stop; private ServiceListener nvstreamListener = new ServiceListener() { public void serviceAdded(ServiceEvent event) { LimeLog.info("mDNS: Machine appeared: "+event.getInfo().getName()); @@ -100,6 +101,7 @@ public class MdnsDiscoveryAgent { } public void startDiscovery(final int discoveryIntervalMs) { + stop = false; discoveryTimer = new Timer(); discoveryTimer.schedule(new TimerTask() { @Override @@ -109,6 +111,15 @@ public class MdnsDiscoveryAgent { try { resolver.close(); } catch (IOException e) {} + resolver = null; + } + + // Stop if requested + if (stop) { + // There will be no further timer invocations now + discoveryTimer.cancel(); + discoveryTimer = null; + return; } // Create a new resolver @@ -134,14 +145,8 @@ public class MdnsDiscoveryAgent { } public void stopDiscovery() { - if (discoveryTimer != null) { - discoveryTimer.cancel(); - discoveryTimer = null; - } - - if (resolver != null) { - resolver.removeServiceListener(SERVICE_TYPE, nvstreamListener); - } + // Trigger a stop on the next timer expiration + stop = true; } public List getComputerSet() {