--- old/test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java 2014-01-26 12:44:07.167658216 +0800 +++ new/test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java 2014-01-26 12:44:06.975658206 +0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,6 +36,7 @@ import java.rmi.activation.*; import java.rmi.*; import java.util.Properties; +import java.util.concurrent.TimeUnit; /** * The test creates an rmid with a special security manager. After @@ -142,93 +143,29 @@ System.err.println("received exception from registration " + "call that should have failed..."); } - - /* - * no longer needed because the security manager - * throws an exception during snapshot - */ - /* - try { - registering.shutdown(); - - System.err.println("received exception from remote " + - "call that should have failed..."); - } catch (RemoteException e) { - } - */ - } catch (Exception e) { TestLibrary.bomb("\nfailure: unexpected exception ", e); } finally { - try { - Thread.sleep(4000); - } catch (InterruptedException e) { - } - - registering = null; - - // Need to make sure that rmid goes away by itself - JavaVM rmidProcess = rmid; - if (rmidProcess != null) { + if(rmid != null) { try { - Runnable waitThread = - new ShutdownDetectThread(rmidProcess); - - synchronized (waitThread) { - (new Thread(waitThread)).start(); - waitThread.wait(SHUTDOWN_TIMEOUT); - System.err.println("rmid has shutdown"); - - if (!rmidDone) { - // ensure that this rmid does not infect - // other tests. - rmidProcess.destroy(); - TestLibrary.bomb("rmid did not shutdown " + - "gracefully in time"); - } + boolean hasShutdown = rmid.waitFor(SHUTDOWN_TIMEOUT, + TimeUnit.MILLISECONDS); + if (hasShutdown) { + System.err.println("rmid has gracefully shutdown in time"); + } else { + TestLibrary.bomb("rmid did not shutdown " + + "gracefully in time"); } - } catch (Exception e) { - TestLibrary.bomb("exception waiting for rmid " + - "to shut down"); + } catch (InterruptedException ex) { + TestLibrary.bomb("\nfailure: unexpected exception ", ex); } } - // else rmid should be down } System.err.println ("\nsuccess: ShutdownGracefully test passed "); } - private static boolean rmidDone = false; - - /** - * class that waits for rmid to exit - */ - private static class ShutdownDetectThread implements Runnable { - private JavaVM rmidProcess = null; - - ShutdownDetectThread(JavaVM rmidProcess) { - this.rmidProcess = rmidProcess; - } - public void run() { - System.err.println("waiting for rmid to shutdown"); - - try { - rmidProcess.waitFor(); - } catch (InterruptedException e) { - // should not happen - } - - synchronized (this) { - // notify parent thread when rmid has exited - this.notify(); - rmidDone = true; - } - - RMID.removeLog(); - } - } - /** * implementation of RegisteringActivatable */ --- old/test/java/rmi/testlibrary/ActivationLibrary.java 2014-01-26 12:44:08.059658259 +0800 +++ new/test/java/rmi/testlibrary/ActivationLibrary.java 2014-01-26 12:44:07.863658249 +0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,6 @@ * */ -import java.io.File; -import java.rmi.Naming; import java.rmi.NoSuchObjectException; import java.rmi.NotBoundException; import java.rmi.Remote; @@ -122,7 +120,9 @@ for (int i = 0; i <= 74; i++) { try { - LocateRegistry.getRegistry(port).lookup(SYSTEM_NAME); + ActivationSystem system = (ActivationSystem)LocateRegistry.getRegistry(port).lookup(SYSTEM_NAME); + if (system == null) + continue; mesg("Activation System available after " + (i * rmidWaitingStepTime) + " milliseconds"); return true; --- old/test/java/rmi/testlibrary/JavaVM.java 2014-01-26 12:44:08.563658284 +0800 +++ new/test/java/rmi/testlibrary/JavaVM.java 2014-01-26 12:44:08.359658273 +0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,7 @@ import java.io.OutputStream; import java.util.Arrays; import java.util.StringTokenizer; +import java.util.concurrent.TimeUnit; /** * RMI regression test utility class that uses Runtime.exec to spawn a @@ -173,6 +174,25 @@ } /** + * Causes the current thread to wait the subprocess to exit, if necessary, + * until the subprocess represented by this Process object has terminated, + * or the specified waiting time elapses. + * @param timeout the maximum time to wait + * @param unit the time unit of the timeout argument + * @return true if the JavaVM has exited and false if the waiting time + * elapsed before the subprocess has exited. + * @throws InterruptedException if the current thread is interrupted + * while waiting. + */ + public boolean waitFor(long timeout, TimeUnit unit) + throws InterruptedException { + if (vm == null) + throw new IllegalStateException("can't wait for JavaVM that isn't running"); + + return vm.waitFor(timeout, unit); + } + + /** * Starts the subprocess, waits for it to exit, and returns its exit status. */ public int execute() throws IOException, InterruptedException {