| #!/bin/sh | 
 |  | 
 | # | 
 | # Copyright (c) 2002, 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 | 
 | #  This is a manual test.  The script isn't smart enough | 
 | #  to detect the correct ordering of the output since it | 
 | #  is produced by multiple threads and can be interleaved | 
 | #  in many different ways. | 
 | # | 
 | #  @bug 4629548 | 
 | #  @summary Deferred StepRequests are lost in multithreaded debuggee | 
 | #  @author Jim Holmlund | 
 | # | 
 | #  @run shell/manual DeferredStepTest.sh | 
 |  | 
 | #  Run this script to see the bug.  See comments at the end | 
 | #  of the .java file for info on what the bug looks like. | 
 |  | 
 | # These are variables that can be set to control execution | 
 |  | 
 | #pkg=untitled7 | 
 | classname=DeferredStepTest | 
 | #compileOptions=-g | 
 | #java=java_g | 
 | #mode=-Xcomp | 
 |  | 
 | createJavaFile() | 
 | { | 
 |     cat <<EOF > $classname.java.1 | 
 | public class $classname { | 
 |   static class  jj1 implements Runnable { | 
 |     public void  run() { | 
 |         int count = 0; | 
 |          | 
 |         for ( int ii = 0; ii < 10; ii++) {  // line 6 | 
 |             int intInPotato04 = 666;        // line 7 | 
 |             ++count;                        // line 8; @1 breakpoint | 
 |             System.out.println("Thread: " + Thread.currentThread().getName());  // line 9 | 
 |         } | 
 |     } | 
 |   } | 
 |  | 
 |   static class jj2 implements Runnable { | 
 |     public void run() { | 
 |         int count2 = 0; | 
 |          | 
 |         for (int ii = 0; ii < 10; ii++) {      // line 18 | 
 |             String StringInPotato05 = "I am";  // line 19 | 
 |             ++count2;                          // line 20; @1 breakpoint | 
 |             System.out.println("Thread: " + Thread.currentThread().getName());  // line 21 | 
 |         } | 
 |     } | 
 |   } | 
 |  | 
 |   public static void  main(String argv[]) { | 
 |       System.out.println("Version = " + System.getProperty("java.version")); | 
 |  | 
 |       jj1 aRP = new jj1(); | 
 |       jj2 asRP = new jj2(); | 
 |       new Thread(aRP,  "jj1 *").start(); | 
 |       new Thread(asRP, "jj2 **").start(); | 
 | //    new Thread(aRP,  "jj3 ***").start(); | 
 | //    new Thread(asRP, "jj4 ****").start(); | 
 |   } | 
 | } | 
 |  | 
 | /**************************** | 
 | To see this bug, do this | 
 |  | 
 |   jdb DeferredStep | 
 |   stop at DeferredStepTest$jj1:8 | 
 |   stop at DeferredStepTest$jj2:20 | 
 |   run | 
 |   next | 
 |   next | 
 |    : | 
 |  | 
 | ********/ | 
 |  | 
 | EOF | 
 | } | 
 |  | 
 | #sleepcmd="sleep 2" | 
 |  | 
 | # This is called to feed cmds to jdb. | 
 | dojdbCmds() | 
 | { | 
 |    #set -x | 
 |    # We can't use setBkpts because it can only set bkpts in one class :-( | 
 |    #setBkpts @1 | 
 |    cmd stop at $classname'$jj1:8' | 
 |    cmd stop at $classname'$jj2:20' | 
 |    #cmd run; $sleepcmd | 
 |    runToBkpt @1 | 
 |    cmd next; $sleepcmd | 
 |    cmd next; $sleepcmd | 
 |    cmd next; $sleepcmd | 
 |    cmd next; $sleepcmd | 
 |    cmd next; $sleepcmd | 
 |    cmd next; $sleepcmd | 
 |    cmd next; $sleepcmd | 
 |    cmd next; $sleepcmd | 
 |    cmd next; $sleepcmd | 
 |    cmd next; $sleepcmd | 
 |    cmd next; $sleepcmd | 
 |    cmd next; $sleepcmd | 
 |    cmd next; $sleepcmd | 
 |    cmd next; $sleepcmd | 
 |    cmd next; $sleepcmd | 
 |    cmd quit | 
 | } | 
 |  | 
 | 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 | 
 |  | 
 | cat <<EOF | 
 | **************************************************************** | 
 | This test should be run and checked manually. | 
 |  | 
 | If this works right, you should see StepEvents/Breakpoint events for lines | 
 |    8, 9, 6, 7, 8, 9, 6, ....   for thread jj11 | 
 | and | 
 |   20, 21, 18, 19, 20, 21, 18, ... for thread jj2  | 
 |  | 
 | Since both threads are running at the same time, these | 
 | events can be intermixed. | 
 |  | 
 | The bug is that you will frequently see step events missing. | 
 | EG, you will see | 
 |   8, 9, 8 | 
 | or | 
 |   20, 21, 20, 21 | 
 | etc | 
 |  | 
 | ============================================================ | 
 | At some point you might get the msg 'Nothing suspended' | 
 | This is bug: | 
 |    4619349 Step Over fails in a multi threaded debuggee | 
 |  | 
 | Kill the test and rerun it if this happens. | 
 | **************************************************************** | 
 |  | 
 | EOF | 
 | runit | 
 | #jdbFailIfPresent "Nothing suspended"  | 
 | #pass |