OpenJDK / aarch32-port / jdk9u / jdk
changeset 10013:4537360f09fe jdk9-b15
Merge
author | wetmore |
---|---|
date | Tue, 27 May 2014 21:29:13 +0000 |
parents | 182b5d527267 c2cb6fbb149e |
children | a02731d3f739 6bdb138b48f9 |
files | src/share/classes/com/sun/tools/hat/MANIFEST.mf src/share/classes/com/sun/tools/hat/README.txt src/share/classes/com/sun/tools/hat/build.xml |
diffstat | 8 files changed, 97 insertions(+), 111 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/com/sun/tools/hat/MANIFEST.mf Tue May 27 17:06:18 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 -Main-Class: com.sun.tools.hat.Main
--- a/src/share/classes/com/sun/tools/hat/README.txt Tue May 27 17:06:18 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ --------------- -This HAT source originally came from the http://hat.dev.java.net site. - -The utility has been named 'jhat' in the JDK, it is basically the same tool. - -Q: Where do I make changes? In the JDK or hat.dev.java.net? - -A: It depends on whether the change is intended for the JDK jhat version only, - or expected to be given back to the java.net project. - In general, we should putback changes to the java.net project and - bringover those changes to the JDK. - -Q: I want to build just jhat.jar instead of building entire JDK. What should I do? - -A: Use ant makefile (build.xml) in the current directory. This builds just the -jhat sources and creates jhat.jar under ./build directory. - -To run the built jhat.jar, you can use the command: - - java -jar build/jhat.jar heap_dump
--- a/src/share/classes/com/sun/tools/hat/build.xml Tue May 27 17:06:18 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<!-- - Copyright (c) 2005, 2008, 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 - under the terms of the GNU General Public License version 2 only, as - published by the Free Software Foundation. Oracle designates this - particular file as subject to the "Classpath" exception as provided - by Oracle in the LICENSE file that accompanied this code. - - This code is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - version 2 for more details (a copy is included in the LICENSE file that - accompanied this code). - - You should have received a copy of the GNU General Public License version - 2 along with this work; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - - Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - or visit www.oracle.com if you need additional information or have any - questions. ---> - -<!-- - - The Original Code is HAT. The Initial Developer of the - Original Code is Bill Foote, with contributions from others - at JavaSoft/Sun. - ---> - -<!-- This is an Ant project file to build Heap Analysis Tool (HAT). - For more information on Ant, please see http://ant.apache.org/ - - To build jhat.jar, run ant in current directory. jhat.jar is - built in ./build directory. ---> - -<project name="Java Heap Analysis Tool" default="all" basedir="."> - - <!-- Property Definitions --> - - <property name="app.name" value="jhat"/> - <property name="src.dir" value="."/> - <property name="build.dir" value="build"/> - <property name="classes.dir" value="${build.dir}/classes"/> - <property name="dist.jar" value="${app.name}.jar"/> - - <target name="prepare"> - <mkdir dir="${build.dir}"/> - <mkdir dir="${classes.dir}"/> - </target> - - <target name="clean"> - <delete dir="${build.dir}"/> - </target> - - <target name="compile" depends="prepare" description="Compiles the sources"> - <javac srcdir="${src.dir}" destdir="${classes.dir}" - debug="on" deprecation="on"> - </javac> - - </target> - - <target name="deploy" depends="compile" description="Creates a deployment bundle"> - <delete file="${build.dir}/${dist.jar}" /> - <mkdir dir="${classes.dir}/com/sun/tools/hat/resources" /> - <copy todir="${classes.dir}/com/sun/tools/hat/resources"> - <fileset dir="${src.dir}/resources" includes="*" /> - </copy> - - <jar jarfile="${build.dir}/${dist.jar}" - manifest="${src.dir}/MANIFEST.mf" basedir="${classes.dir}"/> - </target> - - <target name="all" depends="deploy" description="Builds sources and deployment jar"/> - -</project>
--- a/src/share/classes/java/lang/Process.java Tue May 27 17:06:18 2014 +0000 +++ b/src/share/classes/java/lang/Process.java Tue May 27 21:29:13 2014 +0000 @@ -262,4 +262,18 @@ return true; } } + + /** + * Returns the native process id of the subprocess. + * The native process id is an identification number that the operating + * system assigns to the process. + * + * @return the native process id of the subprocess + * @throws UnsupportedOperationException if the Process implementation + * does not support this operation + * @since 1.9 + */ + public long getPid() { + throw new UnsupportedOperationException(); + } }
--- a/src/solaris/classes/java/lang/UNIXProcess.java Tue May 27 17:06:18 2014 +0000 +++ b/src/solaris/classes/java/lang/UNIXProcess.java Tue May 27 21:29:13 2014 +0000 @@ -483,6 +483,11 @@ } @Override + public long getPid() { + return pid; + } + + @Override public synchronized boolean isAlive() { return !hasExited; }
--- a/src/windows/classes/java/lang/ProcessImpl.java Tue May 27 17:06:18 2014 +0000 +++ b/src/windows/classes/java/lang/ProcessImpl.java Tue May 27 21:29:13 2014 +0000 @@ -25,15 +25,15 @@ package java.lang; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; -import java.io.File; import java.io.InputStream; import java.io.OutputStream; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.FileDescriptor; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; import java.lang.ProcessBuilder.Redirect; import java.security.AccessController; import java.security.PrivilegedAction; @@ -483,6 +483,14 @@ private static native void terminateProcess(long handle); @Override + public long getPid() { + int pid = getProcessId0(handle); + return pid; + } + + private static native int getProcessId0(long handle); + + @Override public boolean isAlive() { return isProcessAlive(handle); }
--- a/src/windows/native/java/lang/ProcessImpl_md.c Tue May 27 17:06:18 2014 +0000 +++ b/src/windows/native/java/lang/ProcessImpl_md.c Tue May 27 21:29:13 2014 +0000 @@ -248,6 +248,17 @@ } } +/* + * Class: java_lang_ProcessImpl + * Method: getProcessId0 + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_java_lang_ProcessImpl_getProcessId0 + (JNIEnv *env, jclass clazz, jlong handle) { + DWORD pid = GetProcessId((HANDLE) jlong_to_ptr(handle)); + return (jint)pid; +} + /* Please, read about the MS inheritance problem http://support.microsoft.com/kb/315939 and critical section/synchronized block solution. */
--- a/test/java/lang/ProcessBuilder/Basic.java Tue May 27 17:06:18 2014 +0000 +++ b/test/java/lang/ProcessBuilder/Basic.java Tue May 27 21:29:13 2014 +0000 @@ -26,7 +26,7 @@ * @bug 4199068 4738465 4937983 4930681 4926230 4931433 4932663 4986689 * 5026830 5023243 5070673 4052517 4811767 6192449 6397034 6413313 * 6464154 6523983 6206031 4960438 6631352 6631966 6850957 6850958 - * 4947220 7018606 7034570 4244896 5049299 + * 4947220 7018606 7034570 4244896 5049299 8003488 * @summary Basic tests for Process and Environment Variable code * @run main/othervm/timeout=300 Basic * @run main/othervm/timeout=300 -Djdk.lang.Process.launchMechanism=fork Basic @@ -1136,6 +1136,53 @@ } } + static void checkProcessPid() { + long actualPid = 0; + long expectedPid = -1; + if (Windows.is()) { + String[] argsTasklist = {"tasklist.exe", "/NH", "/FI", "\"IMAGENAME eq tasklist.exe\""}; + ProcessBuilder pb = new ProcessBuilder(argsTasklist); + try { + Process proc = pb.start(); + expectedPid = proc.getPid(); + + String output = commandOutput(proc); + String[] splits = output.split("\\s+"); + actualPid = Integer.valueOf(splits[2]); + } catch (Throwable t) { + unexpected(t); + } + } else if (Unix.is() || MacOSX.is()) { + String[] shArgs = {"sh", "-c", "echo $$"}; + ProcessBuilder pb = new ProcessBuilder(shArgs); + try { + Process proc = pb.start(); + expectedPid = proc.getPid(); + + String output = commandOutput(proc); + String[] splits = output.split("\\s+"); + actualPid = Integer.valueOf(splits[0]); + } catch (Throwable t) { + unexpected(t); + } + } else { + fail("No test for checkProcessPid on platform: " + System.getProperty("os.name")); + return; + } + + equal(actualPid, expectedPid); + + // Test the default implementation of Process.getPid + try { + DelegatingProcess p = new DelegatingProcess(null); + p.getPid(); + fail("non-overridden Process.getPid method should throw UOE"); + } catch (UnsupportedOperationException uoe) { + // correct + } + + } + private static void realMain(String[] args) throws Throwable { if (Windows.is()) System.out.println("This appears to be a Windows system."); @@ -1148,6 +1195,11 @@ catch (Throwable t) { unexpected(t); } //---------------------------------------------------------------- + // Basic tests for getPid() + //---------------------------------------------------------------- + checkProcessPid(); + + //---------------------------------------------------------------- // Basic tests for setting, replacing and deleting envvars //---------------------------------------------------------------- try {