summaryrefslogtreecommitdiff
path: root/java-compat
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2019-09-13 12:50:50 +0200
committerBenoit Foucher <benoit@zeroc.com>2019-09-13 12:50:50 +0200
commit877cb13cf3a41d301c164131813b78802a97c750 (patch)
treeb2fecb6f714c76b31acbf91fd89f0f9304ad78aa /java-compat
parentEnabled tracing for IceDiscovery/simple test, fix for #516 (diff)
downloadice-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.java3
-rw-r--r--java-compat/src/Ice/src/main/java/IceInternal/UdpMulticastServerTransceiver.java8
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)
{