This commit is contained in:
Bradford Wetmore 2014-05-27 21:29:13 +00:00
commit fad1f2601f
8 changed files with 98 additions and 112 deletions

View file

@ -1,2 +0,0 @@
Manifest-Version: 1.0
Main-Class: com.sun.tools.hat.Main

View file

@ -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

View file

@ -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>

View file

@ -262,4 +262,18 @@ public abstract class Process {
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();
}
}

View file

@ -482,6 +482,11 @@ final class UNIXProcess extends Process {
return this;
}
@Override
public long getPid() {
return pid;
}
@Override
public synchronized boolean isAlive() {
return !hasExited;

View file

@ -25,15 +25,15 @@
package java.lang;
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.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.ProcessBuilder.Redirect;
import java.security.AccessController;
import java.security.PrivilegedAction;
@ -482,6 +482,14 @@ final class ProcessImpl extends Process {
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);

View file

@ -248,6 +248,17 @@ static void restoreIOEHandleState(
}
}
/*
* 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. */

View file

@ -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 @@ public class Basic {
}
}
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.");
@ -1147,6 +1194,11 @@ public class Basic {
try { testIORedirection(); }
catch (Throwable t) { unexpected(t); }
//----------------------------------------------------------------
// Basic tests for getPid()
//----------------------------------------------------------------
checkProcessPid();
//----------------------------------------------------------------
// Basic tests for setting, replacing and deleting envvars
//----------------------------------------------------------------