diff options
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/IceInternal/Connection.java | 50 | ||||
-rw-r--r-- | java/src/IceInternal/Instance.java | 8 | ||||
-rw-r--r-- | java/src/IceInternal/ThreadPool.java | 2 | ||||
-rw-r--r-- | java/src/IceInternal/UdpTransceiver.java | 2 |
4 files changed, 21 insertions, 41 deletions
diff --git a/java/src/IceInternal/Connection.java b/java/src/IceInternal/Connection.java index 80c6f6bd784..7916605fee3 100644 --- a/java/src/IceInternal/Connection.java +++ b/java/src/IceInternal/Connection.java @@ -743,28 +743,10 @@ public final class Connection extends EventHandler setAdapter(Ice.ObjectAdapter adapter) { // - // We are registered with a thread pool in active and closing - // mode. However, we only change subscription if we're in active - // mode, and thus ignore closing mode here. + // We never change the thread pool with which we were + // initially registered, even if we add or remove an object + // adapter. // - if(_state == StateActive) - { - if(adapter != null && _adapter == null) - { - // - // Client is now server. - // - unregisterWithPool(); - } - - if(adapter == null && _adapter != null) - { - // - // Server is now client. - // - unregisterWithPool(); - } - } _adapter = adapter; if(_adapter != null) @@ -1116,6 +1098,7 @@ public final class Connection extends EventHandler { _transceiver.close(); _transceiver = null; + _threadPool = null; // We don't need the thread pool anymore. notifyAll(); } } @@ -1155,10 +1138,12 @@ public final class Connection extends EventHandler if(_adapter != null) { + _threadPool = ((Ice.ObjectAdapterI)_adapter).getThreadPool(); _servantManager = ((Ice.ObjectAdapterI)_adapter).getServantManager(); } else { + _threadPool = _instance.clientThreadPool(); _servantManager = null; } } @@ -1382,15 +1367,8 @@ public final class Connection extends EventHandler { if(!_registeredWithPool) { - if(_adapter != null) - { - ((Ice.ObjectAdapterI)_adapter).getThreadPool()._register(_transceiver.fd(), this); - } - else - { - _instance.clientThreadPool()._register(_transceiver.fd(), this); - } - + assert(_threadPool != null); + _threadPool._register(_transceiver.fd(), this); _registeredWithPool = true; ConnectionMonitor connectionMonitor = _instance.connectionMonitor(); @@ -1406,15 +1384,8 @@ public final class Connection extends EventHandler { if(_registeredWithPool) { - if(_adapter != null) - { - ((Ice.ObjectAdapterI)_adapter).getThreadPool().unregister(_transceiver.fd()); - } - else - { - _instance.clientThreadPool().unregister(_transceiver.fd()); - } - + assert(_threadPool != null); + _threadPool.unregister(_transceiver.fd()); _registeredWithPool = false; ConnectionMonitor connectionMonitor = _instance.connectionMonitor(); @@ -1521,6 +1492,7 @@ public final class Connection extends EventHandler private final TraceLevels _traceLevels; private boolean _registeredWithPool; + private ThreadPool _threadPool; private boolean _warn; diff --git a/java/src/IceInternal/Instance.java b/java/src/IceInternal/Instance.java index 4344399d960..24136efc7c9 100644 --- a/java/src/IceInternal/Instance.java +++ b/java/src/IceInternal/Instance.java @@ -263,11 +263,19 @@ public class Instance { OutgoingConnectionFactory connectionFactory; ObjectAdapterFactory adapterFactory; + synchronized(this) { + + if(_destroyed) + { + throw new Ice.CommunicatorDestroyedException(); + } + connectionFactory = _outgoingConnectionFactory; adapterFactory = _objectAdapterFactory; } + connectionFactory.flushBatchRequests(); adapterFactory.flushBatchRequests(); } diff --git a/java/src/IceInternal/ThreadPool.java b/java/src/IceInternal/ThreadPool.java index 98b33044919..9a89962e632 100644 --- a/java/src/IceInternal/ThreadPool.java +++ b/java/src/IceInternal/ThreadPool.java @@ -1120,5 +1120,5 @@ public final class ThreadPool private boolean _promote; - private boolean _warnUdp; + private final boolean _warnUdp; } diff --git a/java/src/IceInternal/UdpTransceiver.java b/java/src/IceInternal/UdpTransceiver.java index bc8bbc7fc34..d7a5f8fccca 100644 --- a/java/src/IceInternal/UdpTransceiver.java +++ b/java/src/IceInternal/UdpTransceiver.java @@ -367,7 +367,7 @@ final class UdpTransceiver implements Transceiver private Ice.Logger _logger; private boolean _incoming; private boolean _connect; - private boolean _warn; + private final boolean _warn; private int _rcvSize; private int _sndSize; private java.nio.channels.DatagramChannel _fd; |