diff options
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/Ice/Application.java | 41 | ||||
-rw-r--r-- | java/src/Ice/ShutdownHook.java | 35 |
2 files changed, 40 insertions, 36 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; diff --git a/java/src/Ice/ShutdownHook.java b/java/src/Ice/ShutdownHook.java deleted file mode 100644 index 18ad0d47ae1..00000000000 --- a/java/src/Ice/ShutdownHook.java +++ /dev/null @@ -1,35 +0,0 @@ -// ********************************************************************** -// -// Copyright (c) 2002 -// Mutable Realms, Inc. -// Huntsville, AL, USA -// -// All Rights Reserved -// -// ********************************************************************** - -package Ice; - -public class ShutdownHook extends Thread -{ - ShutdownHook(Thread threadToJoin) - { - _threadToJoin = threadToJoin; - } - - public void - run() - { - try - { - Ice.Application.communicator().shutdown(); - _threadToJoin.join(); - } - catch(Exception ex) - { - ex.printStackTrace(); - } - } - - private Thread _threadToJoin; -} |