Synchronize the mDNS events and timer with the MdnsDiscoveryAgent class instead of the instance object as a workaround for JmDNS issue #49

This commit is contained in:
Cameron Gutman 2016-02-23 01:50:21 -05:00
parent 4622b9f202
commit c1c3af3c66

View File

@ -28,6 +28,12 @@ public class MdnsDiscoveryAgent {
private boolean stop; private boolean stop;
private ServiceListener nvstreamListener = new ServiceListener() { private ServiceListener nvstreamListener = new ServiceListener() {
public void serviceAdded(ServiceEvent event) { public void serviceAdded(ServiceEvent event) {
synchronized (MdnsDiscoveryAgent.class) {
if (resolver == null) {
LimeLog.warning("mDNS callback invoked without a resolver!");
return;
}
LimeLog.info("mDNS: Machine appeared: "+event.getInfo().getName()); LimeLog.info("mDNS: Machine appeared: "+event.getInfo().getName());
ServiceInfo[] infos = resolver.getServiceInfos(SERVICE_TYPE, event.getInfo().getName(), 500); ServiceInfo[] infos = resolver.getServiceInfos(SERVICE_TYPE, event.getInfo().getName(), 500);
@ -40,8 +46,10 @@ public class MdnsDiscoveryAgent {
LimeLog.info("mDNS: Resolved (blocking) with "+infos.length+" service entries"); LimeLog.info("mDNS: Resolved (blocking) with "+infos.length+" service entries");
handleResolvedServiceInfo(infos[0]); handleResolvedServiceInfo(infos[0]);
} }
}
public void serviceRemoved(ServiceEvent event) { public void serviceRemoved(ServiceEvent event) {
synchronized (MdnsDiscoveryAgent.class) {
LimeLog.info("mDNS: Machine disappeared: "+event.getInfo().getName()); LimeLog.info("mDNS: Machine disappeared: "+event.getInfo().getName());
Inet4Address addrs[] = event.getInfo().getInet4Addresses(); Inet4Address addrs[] = event.getInfo().getInet4Addresses();
@ -55,11 +63,14 @@ public class MdnsDiscoveryAgent {
} }
} }
} }
}
public void serviceResolved(ServiceEvent event) { public void serviceResolved(ServiceEvent event) {
synchronized (MdnsDiscoveryAgent.class) {
LimeLog.info("mDNS: Machine resolved (callback): "+event.getInfo().getName()); LimeLog.info("mDNS: Machine resolved (callback): "+event.getInfo().getName());
handleResolvedServiceInfo(event.getInfo()); handleResolvedServiceInfo(event.getInfo());
} }
}
}; };
private void handleResolvedServiceInfo(ServiceInfo info) { private void handleResolvedServiceInfo(ServiceInfo info) {
@ -113,7 +124,7 @@ public class MdnsDiscoveryAgent {
t.schedule(new TimerTask() { t.schedule(new TimerTask() {
@Override @Override
public void run() { public void run() {
synchronized (MdnsDiscoveryAgent.this) { synchronized (MdnsDiscoveryAgent.class) {
// Stop if requested // Stop if requested
if (stop) { if (stop) {
// There will be no further timer invocations now // There will be no further timer invocations now