Mercurial > hg > icedtea7-forest-aarch64 > jdk
changeset 5229:cdeb4234136d
7154822: forward port fix for Bug 13645891 to JDK8 jcmd (1024 byte file size limit issue)
Summary: Changed so that jcmd breaks input into individual lines and sends each one to the jvm separately.
Reviewed-by: dcubed, sla
author | dbuck |
---|---|
date | Wed, 25 Apr 2012 04:47:33 -0700 |
parents | a7b0a75b5bae |
children | a5949f7b8693 a841553a32a1 |
files | src/share/classes/sun/tools/jcmd/JCmd.java test/sun/tools/jcmd/dcmd-big-script.txt test/sun/tools/jcmd/jcmd-big-script.sh |
diffstat | 3 files changed, 180 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/sun/tools/jcmd/JCmd.java Tue Apr 24 15:44:13 2012 -0700 +++ b/src/share/classes/sun/tools/jcmd/JCmd.java Wed Apr 25 04:47:33 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. *com.sun.tools.attach.AttachNotSupportedException @@ -142,17 +142,20 @@ // Cast to HotSpotVirtualMachine as this is an // implementation specific method. HotSpotVirtualMachine hvm = (HotSpotVirtualMachine) vm; - try (InputStream in = hvm.executeJCmd(command);) { - // read to EOF and just print output - byte b[] = new byte[256]; - int n; - do { - n = in.read(b); - if (n > 0) { - String s = new String(b, 0, n, "UTF-8"); - System.out.print(s); - } - } while (n > 0); + String lines[] = command .split("\\n"); + for (String line : lines) { + try (InputStream in = hvm.executeJCmd(line);) { + // read to EOF and just print output + byte b[] = new byte[256]; + int n; + do { + n = in.read(b); + if (n > 0) { + String s = new String(b, 0, n, "UTF-8"); + System.out.print(s); + } + } while (n > 0); + } } vm.detach(); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/tools/jcmd/dcmd-big-script.txt Wed Apr 25 04:47:33 2012 -0700 @@ -0,0 +1,95 @@ +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version +VM.version
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/tools/jcmd/jcmd-big-script.sh Wed Apr 25 04:47:33 2012 -0700 @@ -0,0 +1,70 @@ +#!/bin/sh + +# +# Copyright (c) 2012, 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. +# +# 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. +# + + +# @test +# @bug 7154822 +# @summary test if we can send a file over 1024 bytes large via jcmd -f +# @author David Buck +# +# @library ../common +# @build SimpleApplication ShutdownSimpleApplication +# @run shell jcmd-big-script.sh + +. ${TESTSRC}/../common/CommonSetup.sh +. ${TESTSRC}/../common/ApplicationSetup.sh + +# Start application and use PORTFILE for coordination +PORTFILE="${TESTCLASSES}"/shutdown.port +startApplication SimpleApplication "${PORTFILE}" + +failed=0; + +# -f <script> +rm -f jcmd.out 2>/dev/null +set +e # even if jcmd fails, we do not want abort the script yet. +${JCMD} -J-XX:+UsePerfData $appJavaPid -f ${TESTSRC}/dcmd-big-script.txt > jcmd.out 2>&1 +status="$?" +set -e +if [ "$status" != 0 ]; then + echo "jcmd command returned non-zero exit code (status=$status). Failed." + failed=1; +fi +cat jcmd.out +set +e # if the test passes, grep will "fail" with an exit code of 1 +grep Exception jcmd.out > /dev/null 2>&1 +status="$?" +set -e +if [ "$status" = 0 ]; then + echo "Output of \"jcmd [pid] -f dcmd-big-script.txt\" contains string \"Exception\". Failed." + failed=1; +fi + +# clean up +rm -f jcmd.out 2>/dev/null +stopApplication "${PORTFILE}" +waitForApplication + +exit $failed