diff options
Diffstat (limited to 'java/src/Ice/Application.java')
-rw-r--r-- | java/src/Ice/Application.java | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/java/src/Ice/Application.java b/java/src/Ice/Application.java index faa1c836b7c..6bfce8c7647 100644 --- a/java/src/Ice/Application.java +++ b/java/src/Ice/Application.java @@ -94,6 +94,11 @@ public abstract class Application _communicator = null; } + if(_shutdownHook != null) + { + _shutdownHook.done(); + } + return status; } @@ -133,7 +138,7 @@ public abstract class Application // terminated. So the shutdown hook will join the current // thread before to end. // - _shutdownHook = new ShutdownHook(Thread.currentThread()); + _shutdownHook = new ShutdownHook(); Runtime.getRuntime().addShutdownHook(_shutdownHook); } } @@ -163,10 +168,44 @@ public abstract class Application // } + _shutdownHook.done(); _shutdownHook = null; } } + static class ShutdownHook extends Thread + { + ShutdownHook() + { + _done = false; + } + + public synchronized void + run() + { + communicator().shutdown(); + while(!_done) + { + try + { + wait(); + } + catch(InterruptedException ex) + { + } + } + } + + synchronized void + done() + { + _done = true; + notify(); + } + + private boolean _done; + } + private static String _appName; private static Communicator _communicator; private static ShutdownHook _shutdownHook; |