8007710: runtime/7158988/FieldMonitor.java fails with com.sun.jdi.VMDisconnectedException: Connection closed

Fri, 14 Feb 2014 16:17:22 +0100

author
sjiang
date
Fri, 14 Feb 2014 16:17:22 +0100
changeset 6311
2996010c4820
parent 6310
22b3b2f888bc
child 6312
04d32e7fad07

8007710: runtime/7158988/FieldMonitor.java fails with com.sun.jdi.VMDisconnectedException: Connection closed
Reviewed-by: sla, jbachorik, sspitsyn

test/runtime/7158988/FieldMonitor.java file | annotate | diff | comparison | revisions
     1.1 --- a/test/runtime/7158988/FieldMonitor.java	Thu Feb 06 20:13:38 2014 -0800
     1.2 +++ b/test/runtime/7158988/FieldMonitor.java	Fri Feb 14 16:17:22 2014 +0100
     1.3 @@ -34,10 +34,6 @@
     1.4  import java.io.IOException;
     1.5  import java.io.InputStream;
     1.6  import java.io.InputStreamReader;
     1.7 -import java.io.OutputStream;
     1.8 -import java.io.OutputStreamWriter;
     1.9 -import java.io.Reader;
    1.10 -import java.io.Writer;
    1.11  import java.util.Iterator;
    1.12  import java.util.List;
    1.13  import java.util.Map;
    1.14 @@ -56,6 +52,7 @@
    1.15  import com.sun.jdi.event.EventSet;
    1.16  import com.sun.jdi.event.ModificationWatchpointEvent;
    1.17  import com.sun.jdi.event.VMDeathEvent;
    1.18 +import com.sun.jdi.event.VMStartEvent;
    1.19  import com.sun.jdi.event.VMDisconnectEvent;
    1.20  import com.sun.jdi.request.ClassPrepareRequest;
    1.21  import com.sun.jdi.request.EventRequest;
    1.22 @@ -71,24 +68,10 @@
    1.23    public static void main(String[] args)
    1.24        throws IOException, InterruptedException {
    1.25  
    1.26 -    StringBuffer sb = new StringBuffer();
    1.27 -
    1.28 -    for (int i=0; i < args.length; i++) {
    1.29 -        sb.append(' ');
    1.30 -        sb.append(args[i]);
    1.31 -    }
    1.32      //VirtualMachine vm = launchTarget(sb.toString());
    1.33      VirtualMachine vm = launchTarget(CLASS_NAME);
    1.34  
    1.35      System.out.println("Vm launched");
    1.36 -    // set watch field on already loaded classes
    1.37 -    List<ReferenceType> referenceTypes = vm
    1.38 -        .classesByName(CLASS_NAME);
    1.39 -    for (ReferenceType refType : referenceTypes) {
    1.40 -      addFieldWatch(vm, refType);
    1.41 -    }
    1.42 -    // watch for loaded classes
    1.43 -    addClassWatch(vm);
    1.44  
    1.45      // process events
    1.46      EventQueue eventQueue = vm.eventQueue();
    1.47 @@ -104,13 +87,15 @@
    1.48      errThread.start();
    1.49      outThread.start();
    1.50  
    1.51 -
    1.52 -    vm.resume();
    1.53      boolean connected = true;
    1.54 +    int watched = 0;
    1.55      while (connected) {
    1.56        EventSet eventSet = eventQueue.remove();
    1.57        for (Event event : eventSet) {
    1.58 -        if (event instanceof VMDeathEvent
    1.59 +        System.out.println("FieldMonitor-main receives: "+event);
    1.60 +        if (event instanceof VMStartEvent) {
    1.61 +          addClassWatch(vm);
    1.62 +        } else if (event instanceof VMDeathEvent
    1.63              || event instanceof VMDisconnectEvent) {
    1.64            // exit
    1.65            connected = false;
    1.66 @@ -122,17 +107,17 @@
    1.67                .referenceType();
    1.68            addFieldWatch(vm, refType);
    1.69          } else if (event instanceof ModificationWatchpointEvent) {
    1.70 +          watched++;
    1.71            System.out.println("sleep for 500 ms");
    1.72            Thread.sleep(500);
    1.73 -          System.out.println("resume...");
    1.74  
    1.75            ModificationWatchpointEvent modEvent = (ModificationWatchpointEvent) event;
    1.76            System.out.println("old="
    1.77                + modEvent.valueCurrent());
    1.78            System.out.println("new=" + modEvent.valueToBe());
    1.79 -          System.out.println();
    1.80          }
    1.81        }
    1.82 +      System.out.println("resume...");
    1.83        eventSet.resume();
    1.84      }
    1.85      // Shutdown begins when event thread terminates
    1.86 @@ -142,6 +127,10 @@
    1.87      } catch (InterruptedException exc) {
    1.88          // we don't interrupt
    1.89      }
    1.90 +
    1.91 +    if (watched != 11) { // init + 10 modifications in TestPostFieldModification class
    1.92 +        throw new Error("Expected to receive 11 times ModificationWatchpointEvent, but got "+watched);
    1.93 +    }
    1.94    }
    1.95  
    1.96    /**

mercurial