mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 19:44:41 +02:00
Merge
This commit is contained in:
commit
fad1f2601f
8 changed files with 98 additions and 112 deletions
|
@ -1,2 +0,0 @@
|
||||||
Manifest-Version: 1.0
|
|
||||||
Main-Class: com.sun.tools.hat.Main
|
|
|
@ -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
|
|
|
@ -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>
|
|
|
@ -262,4 +262,18 @@ public abstract class Process {
|
||||||
return true;
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -482,6 +482,11 @@ final class UNIXProcess extends Process {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getPid() {
|
||||||
|
return pid;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized boolean isAlive() {
|
public synchronized boolean isAlive() {
|
||||||
return !hasExited;
|
return !hasExited;
|
||||||
|
|
|
@ -25,15 +25,15 @@
|
||||||
|
|
||||||
package java.lang;
|
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.BufferedInputStream;
|
||||||
import java.io.BufferedOutputStream;
|
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.lang.ProcessBuilder.Redirect;
|
||||||
import java.security.AccessController;
|
import java.security.AccessController;
|
||||||
import java.security.PrivilegedAction;
|
import java.security.PrivilegedAction;
|
||||||
|
@ -482,6 +482,14 @@ final class ProcessImpl extends Process {
|
||||||
|
|
||||||
private static native void terminateProcess(long handle);
|
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
|
@Override
|
||||||
public boolean isAlive() {
|
public boolean isAlive() {
|
||||||
return isProcessAlive(handle);
|
return isProcessAlive(handle);
|
||||||
|
|
|
@ -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
|
/* Please, read about the MS inheritance problem
|
||||||
http://support.microsoft.com/kb/315939
|
http://support.microsoft.com/kb/315939
|
||||||
and critical section/synchronized block solution. */
|
and critical section/synchronized block solution. */
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
* @bug 4199068 4738465 4937983 4930681 4926230 4931433 4932663 4986689
|
* @bug 4199068 4738465 4937983 4930681 4926230 4931433 4932663 4986689
|
||||||
* 5026830 5023243 5070673 4052517 4811767 6192449 6397034 6413313
|
* 5026830 5023243 5070673 4052517 4811767 6192449 6397034 6413313
|
||||||
* 6464154 6523983 6206031 4960438 6631352 6631966 6850957 6850958
|
* 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
|
* @summary Basic tests for Process and Environment Variable code
|
||||||
* @run main/othervm/timeout=300 Basic
|
* @run main/othervm/timeout=300 Basic
|
||||||
* @run main/othervm/timeout=300 -Djdk.lang.Process.launchMechanism=fork 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 {
|
private static void realMain(String[] args) throws Throwable {
|
||||||
if (Windows.is())
|
if (Windows.is())
|
||||||
System.out.println("This appears to be a Windows system.");
|
System.out.println("This appears to be a Windows system.");
|
||||||
|
@ -1147,6 +1194,11 @@ public class Basic {
|
||||||
try { testIORedirection(); }
|
try { testIORedirection(); }
|
||||||
catch (Throwable t) { unexpected(t); }
|
catch (Throwable t) { unexpected(t); }
|
||||||
|
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
// Basic tests for getPid()
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
checkProcessPid();
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
// Basic tests for setting, replacing and deleting envvars
|
// Basic tests for setting, replacing and deleting envvars
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue