Fri, 14 Feb 2014 16:17:22 +0100
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 /**