[8u] RFR 8263601: TEST_BUG: remove ActivationLibrary.DestroyThread and have callers call rmid.destroy() instead

Hohensee, Paul hohensee at amazon.com
Tue Apr 27 20:26:17 UTC 2021


Why not backport 8032050 first? It isn't very big, in fact most of it is waitFor().

Thanks,
Paul

-----Original Message-----
From: jdk8u-dev <jdk8u-dev-retn at openjdk.java.net> on behalf of Zhengyu Gu <zgu at redhat.com>
Date: Monday, March 15, 2021 at 10:21 AM
To: jdk8u-dev <jdk8u-dev at openjdk.java.net>
Subject: [8u] RFR 8263601: TEST_BUG: remove ActivationLibrary.DestroyThread and have callers call rmid.destroy() instead

Hi,

I would like to backport this patch to 8u for parity with Oracle 8u301.

Original bug: https://bugs.openjdk.java.net/browse/JDK-8035000
Original patch: http://hg.openjdk.java.net/jdk9/jdk9/jdk/rev/1b599b4755bd

The original patch applies cleanly.

However, patched RMID.java uses waitFor(long timeout) method, that was
introduced by JDK-8032050 [1] and it is not backported to 8u. Therefore,
I propose backport this specific function from JDK-8032050 with this patch.


--- old/test/java/rmi/testlibrary/JavaVM.java   2021-03-15
13:03:32.298020591 -0400
+++ new/test/java/rmi/testlibrary/JavaVM.java   2021-03-15
13:03:32.157020372 -0400
@@ -26,6 +26,7 @@
  import java.io.OutputStream;
  import java.util.Arrays;
  import java.util.StringTokenizer;
+import java.util.concurrent.TimeoutException;

  /**
   * RMI regression test utility class that uses Runtime.exec to spawn a
@@ -183,6 +184,39 @@
          errPipe.join();
          return status;
      }
+    /**
+     * Causes the current thread to wait the vm process to exit, if
necessary,
+     * wait until the vm process has terminated, or the specified
waiting time
+     * elapses. Release allocated input/output after vm process has
terminated.
+     * @param timeout the maximum milliseconds to wait.
+     * @return exit value for vm process.
+     * @throws InterruptedException if the current thread is interrupted
+     *         while waiting.
+     * @throws TimeoutException if subprocess does not end after timeout
+     *         milliseconds passed
+     */
+     public int waitFor(long timeout)
+            throws InterruptedException, TimeoutException {
+         if (vm == null)
+             throw new IllegalStateException("can't wait for JavaVM
that isn't running");
+         long startTime = System.currentTimeMillis();
+         long rem = timeout;
+
+         do {
+            try {
+                int status = vm.exitValue();
+                outPipe.join();
+                errPipe.join();
+                return status;
+            } catch (IllegalThreadStateException ex) {
+                if (rem > 0) {
+                    Thread.sleep(Math.min(rem, 100));
+                }
+            }
+            rem = timeout - (System.currentTimeMillis() - startTime);
+         } while (rem > 0);
+         throw new TimeoutException();
+     }

      /**
       * Starts the subprocess, waits for it to exit, and returns its
exit status.


Thanks,

-Zhengyu

[1] https://bugs.openjdk.java.net/browse/JDK-8032050




More information about the jdk8u-dev mailing list