summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/Ice/ObjectAdapterI.java33
-rw-r--r--java/src/IceInternal/IncomingConnectionFactory.java21
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;
}