summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/IceInternal/Connection.java17
-rw-r--r--java/src/IceInternal/OutgoingAsync.java2
2 files changed, 17 insertions, 2 deletions
diff --git a/java/src/IceInternal/Connection.java b/java/src/IceInternal/Connection.java
index 53830d84a97..5275f7ef10a 100644
--- a/java/src/IceInternal/Connection.java
+++ b/java/src/IceInternal/Connection.java
@@ -85,7 +85,22 @@ public final class Connection extends EventHandler
{
try
{
- wait();
+ if(_endpoint.timeout() >= 0)
+ {
+ long absoluteTimeoutMillis = System.currentTimeMillis() + _endpoint.timeout();
+
+ wait(_endpoint.timeout());
+
+ if(System.currentTimeMillis() >= absoluteTimeoutMillis)
+ {
+ setState(StateClosed, new Ice.CloseTimeoutException());
+ // No return here, we must still wait until _transceiver becomes null.
+ }
+ }
+ else
+ {
+ wait();
+ }
}
catch(InterruptedException ex)
{
diff --git a/java/src/IceInternal/OutgoingAsync.java b/java/src/IceInternal/OutgoingAsync.java
index 93a5691a4c8..fa1c493272a 100644
--- a/java/src/IceInternal/OutgoingAsync.java
+++ b/java/src/IceInternal/OutgoingAsync.java
@@ -99,7 +99,7 @@ public abstract class OutgoingAsync
if(_connection.timeout() >= 0)
{
- _absoluteTimeoutMillis = System.currentTimeMillis() + _connection.timeout() * 1000;
+ _absoluteTimeoutMillis = System.currentTimeMillis() + _connection.timeout();
}
}
catch(RuntimeException ex)