hotspot/test/runtime/7158988/FieldMonitor.java
changeset 26687 eb6c5d0d1d6b
parent 26140 5d408e1fa677
child 35061 be6025ebffea
equal deleted inserted replaced
26686:d7bc560b0ee9 26687:eb6c5d0d1d6b
    24 /*
    24 /*
    25  * @test FieldMonitor.java
    25  * @test FieldMonitor.java
    26  * @bug 7158988
    26  * @bug 7158988
    27  * @key regression
    27  * @key regression
    28  * @summary verify jvm does not crash while debugging
    28  * @summary verify jvm does not crash while debugging
    29  * @ignore 8055145
       
    30  * @run compile TestPostFieldModification.java
    29  * @run compile TestPostFieldModification.java
    31  * @run main/othervm FieldMonitor
    30  * @run main/othervm FieldMonitor
    32  * @author axel.siebenborn@sap.com
    31  * @author axel.siebenborn@sap.com
    33  */
    32  */
    34 import java.io.BufferedReader;
    33 import java.io.BufferedReader;
    89     outThread.start();
    88     outThread.start();
    90 
    89 
    91     boolean connected = true;
    90     boolean connected = true;
    92     int watched = 0;
    91     int watched = 0;
    93     while (connected) {
    92     while (connected) {
    94       EventSet eventSet = eventQueue.remove();
    93         try {
    95       for (Event event : eventSet) {
    94             EventSet eventSet = eventQueue.remove();
    96         System.out.println("FieldMonitor-main receives: "+event);
    95             for (Event event : eventSet) {
    97         if (event instanceof VMStartEvent) {
    96               System.out.println("FieldMonitor-main receives: "+event);
    98           addClassWatch(vm);
    97               if (event instanceof VMStartEvent) {
    99         } else if (event instanceof VMDeathEvent
    98                 addClassWatch(vm);
   100             || event instanceof VMDisconnectEvent) {
    99               } else if (event instanceof VMDeathEvent
   101           // exit
   100                   || event instanceof VMDisconnectEvent) {
   102           connected = false;
   101                 // exit
   103         } else if (event instanceof ClassPrepareEvent) {
   102                 connected = false;
   104           // watch field on loaded class
   103               } else if (event instanceof ClassPrepareEvent) {
   105           System.out.println("ClassPrepareEvent");
   104                 // watch field on loaded class
   106           ClassPrepareEvent classPrepEvent = (ClassPrepareEvent) event;
   105                 System.out.println("ClassPrepareEvent");
   107           ReferenceType refType = classPrepEvent
   106                 ClassPrepareEvent classPrepEvent = (ClassPrepareEvent) event;
   108               .referenceType();
   107                 ReferenceType refType = classPrepEvent
   109           addFieldWatch(vm, refType);
   108                     .referenceType();
   110         } else if (event instanceof ModificationWatchpointEvent) {
   109                 addFieldWatch(vm, refType);
   111           watched++;
   110               } else if (event instanceof ModificationWatchpointEvent) {
   112           System.out.println("sleep for 500 ms");
   111                 watched++;
   113           Thread.sleep(500);
   112                 System.out.println("sleep for 500 ms");
   114 
   113                 Thread.sleep(500);
   115           ModificationWatchpointEvent modEvent = (ModificationWatchpointEvent) event;
   114 
   116           System.out.println("old="
   115                 ModificationWatchpointEvent modEvent = (ModificationWatchpointEvent) event;
   117               + modEvent.valueCurrent());
   116                 System.out.println("old="
   118           System.out.println("new=" + modEvent.valueToBe());
   117                     + modEvent.valueCurrent());
       
   118                 System.out.println("new=" + modEvent.valueToBe());
       
   119               }
       
   120             }
       
   121             System.out.println("resume...");
       
   122             eventSet.resume();
       
   123         } catch (com.sun.jdi.VMDisconnectedException exc) {
       
   124             // Guess this means it's not connected anymore,
       
   125             // sometimes this happens and everything else hangs, just return.
       
   126             return;
   119         }
   127         }
   120       }
       
   121       System.out.println("resume...");
       
   122       eventSet.resume();
       
   123     }
   128     }
   124     // Shutdown begins when event thread terminates
   129     // Shutdown begins when event thread terminates
   125     try {
   130     try {
   126         errThread.join(); // Make sure output is forwarded
   131         errThread.join(); // Make sure output is forwarded
   127         outThread.join();
   132         outThread.join();