diff options
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/IceInternal/Connection.java | 17 | ||||
-rw-r--r-- | java/src/IceInternal/OutgoingAsync.java | 2 |
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) |