diff options
author | mkuppe | 2009-02-27 13:56:20 +0000 |
---|---|---|
committer | mkuppe | 2009-02-27 13:56:20 +0000 |
commit | 6370e1e31e78fdeb4ac800cb0aad997668ebd326 (patch) | |
tree | 74e73bc372d5ee350b4d0b1a6722548dc897817f /providers/bundles/org.eclipse.ecf.provider.jmdns | |
parent | 0dedf589ddfdf3f4e0d3610332aaee720a18c877 (diff) | |
download | org.eclipse.ecf-6370e1e31e78fdeb4ac800cb0aad997668ebd326.tar.gz org.eclipse.ecf-6370e1e31e78fdeb4ac800cb0aad997668ebd326.tar.xz org.eclipse.ecf-6370e1e31e78fdeb4ac800cb0aad997668ebd326.zip |
RESOLVED - bug 265415: [Discovery][JMDNS] Dead-lock in javax.jmdns.impl.JmDNSImpl.unregisterService(ServiceInfo)
https://bugs.eclipse.org/bugs/show_bug.cgi?id=265415
Diffstat (limited to 'providers/bundles/org.eclipse.ecf.provider.jmdns')
2 files changed, 14 insertions, 6 deletions
diff --git a/providers/bundles/org.eclipse.ecf.provider.jmdns/jmdns/javax/jmdns/impl/JmDNSImpl.java b/providers/bundles/org.eclipse.ecf.provider.jmdns/jmdns/javax/jmdns/impl/JmDNSImpl.java index ed3b1a879..83ad1c47b 100644 --- a/providers/bundles/org.eclipse.ecf.provider.jmdns/jmdns/javax/jmdns/impl/JmDNSImpl.java +++ b/providers/bundles/org.eclipse.ecf.provider.jmdns/jmdns/javax/jmdns/impl/JmDNSImpl.java @@ -1133,17 +1133,20 @@ public class JmDNSImpl extends JmDNS public void startAnnouncer() { - new Announcer(this).start(timer); + if(getState() != DNSState.CANCELED) + new Announcer(this).start(timer); } public void startRenewer() { - new Renewer(this).start(timer); + if(getState() != DNSState.CANCELED) + new Renewer(this).start(timer); } public void schedule(TimerTask task, int delay) { - timer.schedule(task, delay); + if(getState() != DNSState.CANCELED) + timer.schedule(task, delay); } // REMIND: Why is this not an anonymous inner class? @@ -1222,15 +1225,15 @@ public class JmDNSImpl extends JmDNS setState(DNSState.CANCELED); // This protects against recursive // calls + // Stop the timer + timer.cancel(); + unregisterAllServices(); disposeServiceCollectors(); // close socket closeMulticastSocket(); - // Stop the timer - timer.cancel(); - // remove the shutdown hook if (shutdown != null) { diff --git a/providers/bundles/org.eclipse.ecf.provider.jmdns/jmdns/javax/jmdns/impl/tasks/Canceler.java b/providers/bundles/org.eclipse.ecf.provider.jmdns/jmdns/javax/jmdns/impl/tasks/Canceler.java index f832eb9dc..23997281f 100644 --- a/providers/bundles/org.eclipse.ecf.provider.jmdns/jmdns/javax/jmdns/impl/tasks/Canceler.java +++ b/providers/bundles/org.eclipse.ecf.provider.jmdns/jmdns/javax/jmdns/impl/tasks/Canceler.java @@ -111,6 +111,11 @@ public class Canceler extends TimerTask catch (Throwable e) { // logger.log(Level.WARNING, "run() exception ", e); + synchronized (lock) + { + lock.notifyAll(); + } + this.cancel(); this.jmDNSImpl.recover(); } } |