diff options
author | Benoit Foucher <benoit@zeroc.com> | 2015-02-04 10:50:03 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2015-02-04 10:50:03 +0100 |
commit | 161e4310b8d7d87d23e5692fc9482126d8bffd11 (patch) | |
tree | c395bd5b00e983ce2d6f4468def24fffae42ecbd /java/src | |
parent | Fixed (ICE-6203) - Automate service testing (diff) | |
download | ice-161e4310b8d7d87d23e5692fc9482126d8bffd11.tar.bz2 ice-161e4310b8d7d87d23e5692fc9482126d8bffd11.tar.xz ice-161e4310b8d7d87d23e5692fc9482126d8bffd11.zip |
Fixed ICE-6290: incorrect handling of acceptor exceptions
Diffstat (limited to 'java/src')
3 files changed, 29 insertions, 9 deletions
diff --git a/java/src/Ice/src/main/java/IceInternal/IncomingConnectionFactory.java b/java/src/Ice/src/main/java/IceInternal/IncomingConnectionFactory.java index 37478d5ee52..6d21cd8d2b7 100644 --- a/java/src/Ice/src/main/java/IceInternal/IncomingConnectionFactory.java +++ b/java/src/Ice/src/main/java/IceInternal/IncomingConnectionFactory.java @@ -601,7 +601,7 @@ public final class IncomingConnectionFactory extends EventHandler implements Ice _adapter.getThreadPool().register(this, SocketOperation.Read); } } - catch(Ice.LocalException ex) + catch(Exception ex) { if(_acceptor != null) { diff --git a/java/src/Ice/src/main/java/IceInternal/TcpAcceptor.java b/java/src/Ice/src/main/java/IceInternal/TcpAcceptor.java index b6deb8877f3..7b69f8986ba 100644 --- a/java/src/Ice/src/main/java/IceInternal/TcpAcceptor.java +++ b/java/src/Ice/src/main/java/IceInternal/TcpAcceptor.java @@ -20,15 +20,25 @@ class TcpAcceptor implements Acceptor @Override public void close() { - assert(_fd != null); - Network.closeSocketNoThrow(_fd); - _fd = null; + if(_fd != null) + { + Network.closeSocketNoThrow(_fd); + _fd = null; + } } @Override public EndpointI listen() { - _addr = Network.doBind(_fd, _addr, _backlog); + try + { + _addr = Network.doBind(_fd, _addr, _backlog); + } + catch(Ice.Exception ex) + { + _fd = null; + throw ex; + } _endpoint = _endpoint.endpoint(this); return _endpoint; } diff --git a/java/src/Ice/src/main/java/IceSSL/AcceptorI.java b/java/src/Ice/src/main/java/IceSSL/AcceptorI.java index fedd10fb49a..55be3f583c6 100644 --- a/java/src/Ice/src/main/java/IceSSL/AcceptorI.java +++ b/java/src/Ice/src/main/java/IceSSL/AcceptorI.java @@ -20,15 +20,25 @@ final class AcceptorI implements IceInternal.Acceptor @Override public void close() { - assert(_fd != null); - IceInternal.Network.closeSocketNoThrow(_fd); - _fd = null; + if(_fd != null) + { + IceInternal.Network.closeSocketNoThrow(_fd); + _fd = null; + } } @Override public IceInternal.EndpointI listen() { - _addr = IceInternal.Network.doBind(_fd, _addr, _backlog); + try + { + _addr = IceInternal.Network.doBind(_fd, _addr, _backlog); + } + catch(Ice.Exception ex) + { + _fd = null; + throw ex; + } _endpoint = _endpoint.endpoint(this); return _endpoint; } |