summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/IncomingConnectionFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/IceInternal/IncomingConnectionFactory.java')
-rw-r--r--java/src/IceInternal/IncomingConnectionFactory.java21
1 files changed, 21 insertions, 0 deletions
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;
}