diff options
author | Benoit Foucher <benoit@zeroc.com> | 2019-09-13 12:50:50 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2019-09-13 12:50:50 +0200 |
commit | 877cb13cf3a41d301c164131813b78802a97c750 (patch) | |
tree | b2fecb6f714c76b31acbf91fd89f0f9304ad78aa /java-compat | |
parent | Enabled tracing for IceDiscovery/simple test, fix for #516 (diff) | |
download | ice-877cb13cf3a41d301c164131813b78802a97c750.tar.bz2 ice-877cb13cf3a41d301c164131813b78802a97c750.tar.xz ice-877cb13cf3a41d301c164131813b78802a97c750.zip |
Fixed race condition in Android/UDP transport, fixes #527
Diffstat (limited to 'java-compat')
-rw-r--r-- | java-compat/src/Ice/src/main/java/IceInternal/UdpMulticastClientTransceiver.java | 3 | ||||
-rw-r--r-- | java-compat/src/Ice/src/main/java/IceInternal/UdpMulticastServerTransceiver.java | 8 |
2 files changed, 9 insertions, 2 deletions
diff --git a/java-compat/src/Ice/src/main/java/IceInternal/UdpMulticastClientTransceiver.java b/java-compat/src/Ice/src/main/java/IceInternal/UdpMulticastClientTransceiver.java index 59e521cc5a4..25a26806bc6 100644 --- a/java-compat/src/Ice/src/main/java/IceInternal/UdpMulticastClientTransceiver.java +++ b/java-compat/src/Ice/src/main/java/IceInternal/UdpMulticastClientTransceiver.java @@ -27,7 +27,9 @@ final class UdpMulticastClientTransceiver implements Transceiver @Override public void setReadyCallback(ReadyCallback callback) { + assert(_readyCallback == null && callback != null); _readyCallback = callback; + _thread.start(); } @Override @@ -249,7 +251,6 @@ final class UdpMulticastClientTransceiver implements Transceiver runWriteThread(); } }; - _thread.start(); } catch(Exception ex) { diff --git a/java-compat/src/Ice/src/main/java/IceInternal/UdpMulticastServerTransceiver.java b/java-compat/src/Ice/src/main/java/IceInternal/UdpMulticastServerTransceiver.java index 15abb5ad2d0..6cdecaa8f8c 100644 --- a/java-compat/src/Ice/src/main/java/IceInternal/UdpMulticastServerTransceiver.java +++ b/java-compat/src/Ice/src/main/java/IceInternal/UdpMulticastServerTransceiver.java @@ -27,7 +27,14 @@ final class UdpMulticastServerTransceiver implements Transceiver @Override public void setReadyCallback(ReadyCallback callback) { + assert(_readyCallback == null && callback != null); _readyCallback = callback; + + // + // Start the thread only once the ready callback is set or otherwise the thread + // might start receiving datagrams but wouldn't be able to notify the thread pool. + // + _thread.start(); } @Override @@ -255,7 +262,6 @@ final class UdpMulticastServerTransceiver implements Transceiver runReadThread(); } }; - _thread.start(); } catch(Exception ex) { |