diff -r d62ebdfd8f18 -r 46ca82c15f6c test/jdk/com/sun/jdi/RedefineMulti.sh --- a/test/jdk/com/sun/jdi/RedefineMulti.sh Fri Sep 21 10:18:12 2018 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -#!/bin/sh - -# -# Copyright (c) 2002, 2014, 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 4724076 -# @summary Redefine does not work in for/while loop -# @author Jim Holmlund/Swamy Venkataramanappa -# -# The failure occurs when a method is active and -# a method that it calls multiple times is redefined -# more than once. -# @run shell/timeout=240 RedefineMulti.sh - -compileOptions=-g -#java=java_g - -createJavaFile() -{ - cat < $1.java.1 - -public class $1 { - - String field1; - String field2; - - // The first time thru the loop in start, - // "Before update..." should be printed. - // After the first redefine, "After update..." should be printed - // After the 2nd redefine, "abcde..." should be printed. - // The bug is that "After update..." is printed instead because - // stat() calls version 2 of doSomething() instead of - // version 3. - private void doSomething() { - System.out.println("Before update..."); // @1 commentout - // @1 uncomment System.out.println("After update..."); // @2 commentout - // @2 uncomment System.out.println("abcde..."); - } - - public void start() { - for (int i=0; i < 3; i++) { - doSomething(); // @1 breakpoint here line 16 - System.out.println("field1 = " + field1); - System.out.println("field2 = " + field2); - } - // Redefinex myx = new Redefinex(); - // for (int i = 0; i < 5; i++) { - // myx.methodx1(); // line 22 - // System.out.println("fieldx1 = " + myx.fieldx1); - // System.out.println("fieldx2 = " + myx.fieldx2); - // } - } - - public static void main(String[] args) { - $1 xxx = new $1(); - xxx.field1 = "field1"; - xxx.field2 = "field2"; - xxx.start(); - } -} - -class Redefinex { - public String fieldx1; - public String fieldx2; - - Redefinex() { - fieldx1 = "fieldx1"; - fieldx2 = "fieldx2"; - } - - public void methodx1() { - System.out.println("redefinex 1"); - //System.out.println("redefinex 2"); - //System.out.println("redefinex 3"); - } - -} - - /********* -Steps to reproduce this problem: - a. add line breakpoint in start() - b. debug - c. when breakpoint is hit, type continue. You should see output -"Before update..." - d. change "Before update" to "After update" - e. redefine, and set line breakpoint (see step a) - f. type continue. You should see output "After update" - g. change "After update" to "abcde" - h. redefine, and set line breakpoint (see step a) - i. type continue. The output is shown as "After update" - - j. to see "abcde" output, users will have to pop the stack, and -re-execute method start(). - ************/ -EOF -} - -# This is called to feed cmds to jdb. -dojdbCmds() -{ - setBkpts @1 - runToBkpt @1 - contToBkpt - redefineClass @1 - setBkpts @1 - contToBkpt - redefineClass @2 - cmd allowExit cont -} - - -mysetup() -{ - if [ -z "$TESTSRC" ] ; then - TESTSRC=. - fi - - for ii in . $TESTSRC $TESTSRC/.. ; do - if [ -r "$ii/ShellScaffold.sh" ] ; then - . $ii/ShellScaffold.sh - break - fi - done -} - -# You could replace this next line with the contents -# of ShellScaffold.sh and this script will run just the same. -mysetup - -runit -debuggeeFailIfPresent "Internal exception:" -debuggeeFailIfNotPresent "abcde" -pass