diff options
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/Ice/ObjectAdapterI.java | 33 | ||||
-rw-r--r-- | java/src/IceInternal/IncomingConnectionFactory.java | 21 |
2 files changed, 43 insertions, 11 deletions
diff --git a/java/src/Ice/ObjectAdapterI.java b/java/src/Ice/ObjectAdapterI.java index de5fec4c5fc..941cb64bed0 100644 --- a/java/src/Ice/ObjectAdapterI.java +++ b/java/src/Ice/ObjectAdapterI.java @@ -33,7 +33,7 @@ public class ObjectAdapterI implements ObjectAdapter } final int sz = _incomingConnectionFactories.size(); - for (int i = 0; i < sz; i++) + for (int i = 0; i < sz; ++i) { IceInternal.IncomingConnectionFactory factory = (IceInternal.IncomingConnectionFactory)_incomingConnectionFactories.get(i); @@ -60,7 +60,7 @@ public class ObjectAdapterI implements ObjectAdapter } final int sz = _incomingConnectionFactories.size(); - for (int i = 0; i < sz; i++) + for (int i = 0; i < sz; ++i) { IceInternal.IncomingConnectionFactory factory = (IceInternal.IncomingConnectionFactory)_incomingConnectionFactories.get(i); @@ -81,13 +81,12 @@ public class ObjectAdapterI implements ObjectAdapter } final int sz = _incomingConnectionFactories.size(); - for (int i = 0; i < sz; i++) + for (int i = 0; i < sz; ++i) { IceInternal.IncomingConnectionFactory factory = (IceInternal.IncomingConnectionFactory)_incomingConnectionFactories.get(i); factory.destroy(); } - _incomingConnectionFactories.clear(); _instance.outgoingConnectionFactory().removeAdapter(this); @@ -104,6 +103,18 @@ public class ObjectAdapterI implements ObjectAdapter _deactivated = true; } + public synchronized void + waitForDeactivate() + { + final int sz = _incomingConnectionFactories.size(); + for (int i = 0; i < sz; ++i) + { + IceInternal.IncomingConnectionFactory factory = + (IceInternal.IncomingConnectionFactory)_incomingConnectionFactories.get(i); + factory.waitUntilFinished(); + } + } + public synchronized ObjectPrx add(Ice.Object servant, Identity ident) { @@ -250,12 +261,12 @@ public class ObjectAdapterI implements ObjectAdapter // ObjectPrxHelper proxy = (ObjectPrxHelper)routerInfo.getServerProxy(); IceInternal.Endpoint[] endpoints = proxy.__reference().endpoints; - for (int i = 0; i < endpoints.length; i++) + for (int i = 0; i < endpoints.length; ++i) { _routerEndpoints.add(endpoints[i]); } java.util.Collections.sort(_routerEndpoints); // Must be sorted. - for (int i = 0; i < _routerEndpoints.size() - 1; i++) + for (int i = 0; i < _routerEndpoints.size() - 1; ++i) { java.lang.Object o1 = _routerEndpoints.get(i); java.lang.Object o2 = _routerEndpoints.get(i + 1); @@ -286,7 +297,7 @@ public class ObjectAdapterI implements ObjectAdapter { java.util.ArrayList connections = new java.util.ArrayList(); final int sz = _incomingConnectionFactories.size(); - for (int i = 0; i < sz; i++) + for (int i = 0; i < sz; ++i) { IceInternal.IncomingConnectionFactory factory = (IceInternal.IncomingConnectionFactory)_incomingConnectionFactories.get(i); @@ -396,7 +407,7 @@ public class ObjectAdapterI implements ObjectAdapter // factories. // int sz = _incomingConnectionFactories.size(); - for (int i = 0; i < sz; i++) + for (int i = 0; i < sz; ++i) { IceInternal.IncomingConnectionFactory factory = (IceInternal.IncomingConnectionFactory)_incomingConnectionFactories.get(i); @@ -409,7 +420,7 @@ public class ObjectAdapterI implements ObjectAdapter // will also point to the router's server proxy endpoints. // sz = _routerEndpoints.size(); - for (int i = 0; i < sz; i++) + for (int i = 0; i < sz; ++i) { endpoints[_incomingConnectionFactories.size() + i] = (IceInternal.Endpoint)_routerEndpoints.get(i); } @@ -435,7 +446,7 @@ public class ObjectAdapterI implements ObjectAdapter // endpoints used by this object adapter's incoming connection // factories are considered local. // - for (int i = 0; i < endpoints.length; i++) + for (int i = 0; i < endpoints.length; ++i) { final int sz = _incomingConnectionFactories.size(); for (int j = 0; j < sz; j++) @@ -454,7 +465,7 @@ public class ObjectAdapterI implements ObjectAdapter // router's server proxy endpoints (if any), are also considered // local. // - for (int i = 0; i < endpoints.length; i++) + for (int i = 0; i < endpoints.length; ++i) { if (java.util.Collections.binarySearch(_routerEndpoints, endpoints[i]) >= 0) // _routerEndpoints is sorted. { diff --git a/java/src/IceInternal/IncomingConnectionFactory.java b/java/src/IceInternal/IncomingConnectionFactory.java index a4cacda340e..d2f8fd53e2f 100644 --- a/java/src/IceInternal/IncomingConnectionFactory.java +++ b/java/src/IceInternal/IncomingConnectionFactory.java @@ -174,6 +174,9 @@ public class IncomingConnectionFactory extends EventHandler } _acceptor.close(); + + _finished = true; + notifyAll(); // For waitUntilFinished(). } } @@ -209,6 +212,7 @@ public class IncomingConnectionFactory extends EventHandler _adapter = adapter; _state = StateHolding; _warn = _instance.properties().getPropertyAsInt("Ice.ConnectionWarnings") > 0 ? true : false; + _finished = false; try { @@ -242,6 +246,7 @@ public class IncomingConnectionFactory extends EventHandler throws Throwable { assert(_state == StateClosed); + assert(_finished); // // Destroy the EventHandler's stream, so that its buffer @@ -258,6 +263,21 @@ public class IncomingConnectionFactory extends EventHandler setState(StateClosed); } + public synchronized void + waitUntilFinished() + { + while (!_finished) + { + try + { + wait(); + } + catch (InterruptedException ex) + { + } + } + } + private static final int StateActive = 0; private static final int StateHolding = 1; private static final int StateClosed = 2; @@ -376,4 +396,5 @@ public class IncomingConnectionFactory extends EventHandler private java.util.LinkedList _connections = new java.util.LinkedList(); private int _state; private boolean _warn; + private boolean _finished; } |