comparison test/runtime/7158988/FieldMonitor.java @ 14909:4ca6dc0799b6

Backout jdk9 merge
author Gilles Duboscq <duboscq@ssw.jku.at>
date Tue, 01 Apr 2014 13:57:07 +0200
parents cbdbdd6577f6
children 52b4284cb496
comparison
equal deleted inserted replaced
14908:8db6e76cb658 14909:4ca6dc0799b6
32 */ 32 */
33 import java.io.BufferedReader; 33 import java.io.BufferedReader;
34 import java.io.IOException; 34 import java.io.IOException;
35 import java.io.InputStream; 35 import java.io.InputStream;
36 import java.io.InputStreamReader; 36 import java.io.InputStreamReader;
37 import java.io.OutputStream;
38 import java.io.OutputStreamWriter;
39 import java.io.Reader;
40 import java.io.Writer;
37 import java.util.Iterator; 41 import java.util.Iterator;
38 import java.util.List; 42 import java.util.List;
39 import java.util.Map; 43 import java.util.Map;
40 44
41 import com.sun.jdi.Bootstrap; 45 import com.sun.jdi.Bootstrap;
50 import com.sun.jdi.event.Event; 54 import com.sun.jdi.event.Event;
51 import com.sun.jdi.event.EventQueue; 55 import com.sun.jdi.event.EventQueue;
52 import com.sun.jdi.event.EventSet; 56 import com.sun.jdi.event.EventSet;
53 import com.sun.jdi.event.ModificationWatchpointEvent; 57 import com.sun.jdi.event.ModificationWatchpointEvent;
54 import com.sun.jdi.event.VMDeathEvent; 58 import com.sun.jdi.event.VMDeathEvent;
55 import com.sun.jdi.event.VMStartEvent;
56 import com.sun.jdi.event.VMDisconnectEvent; 59 import com.sun.jdi.event.VMDisconnectEvent;
57 import com.sun.jdi.request.ClassPrepareRequest; 60 import com.sun.jdi.request.ClassPrepareRequest;
58 import com.sun.jdi.request.EventRequest; 61 import com.sun.jdi.request.EventRequest;
59 import com.sun.jdi.request.EventRequestManager; 62 import com.sun.jdi.request.EventRequestManager;
60 import com.sun.jdi.request.ModificationWatchpointRequest; 63 import com.sun.jdi.request.ModificationWatchpointRequest;
66 public static final String ARGUMENTS = "-Xshare:off -XX:+PrintGC"; 69 public static final String ARGUMENTS = "-Xshare:off -XX:+PrintGC";
67 70
68 public static void main(String[] args) 71 public static void main(String[] args)
69 throws IOException, InterruptedException { 72 throws IOException, InterruptedException {
70 73
74 StringBuffer sb = new StringBuffer();
75
76 for (int i=0; i < args.length; i++) {
77 sb.append(' ');
78 sb.append(args[i]);
79 }
71 //VirtualMachine vm = launchTarget(sb.toString()); 80 //VirtualMachine vm = launchTarget(sb.toString());
72 VirtualMachine vm = launchTarget(CLASS_NAME); 81 VirtualMachine vm = launchTarget(CLASS_NAME);
73 82
74 System.out.println("Vm launched"); 83 System.out.println("Vm launched");
84 // set watch field on already loaded classes
85 List<ReferenceType> referenceTypes = vm
86 .classesByName(CLASS_NAME);
87 for (ReferenceType refType : referenceTypes) {
88 addFieldWatch(vm, refType);
89 }
90 // watch for loaded classes
91 addClassWatch(vm);
75 92
76 // process events 93 // process events
77 EventQueue eventQueue = vm.eventQueue(); 94 EventQueue eventQueue = vm.eventQueue();
78 // resume the vm 95 // resume the vm
79 96
85 Thread errThread = new StreamRedirectThread("error reader", process.getErrorStream()); 102 Thread errThread = new StreamRedirectThread("error reader", process.getErrorStream());
86 103
87 errThread.start(); 104 errThread.start();
88 outThread.start(); 105 outThread.start();
89 106
107
108 vm.resume();
90 boolean connected = true; 109 boolean connected = true;
91 int watched = 0;
92 while (connected) { 110 while (connected) {
93 EventSet eventSet = eventQueue.remove(); 111 EventSet eventSet = eventQueue.remove();
94 for (Event event : eventSet) { 112 for (Event event : eventSet) {
95 System.out.println("FieldMonitor-main receives: "+event); 113 if (event instanceof VMDeathEvent
96 if (event instanceof VMStartEvent) {
97 addClassWatch(vm);
98 } else if (event instanceof VMDeathEvent
99 || event instanceof VMDisconnectEvent) { 114 || event instanceof VMDisconnectEvent) {
100 // exit 115 // exit
101 connected = false; 116 connected = false;
102 } else if (event instanceof ClassPrepareEvent) { 117 } else if (event instanceof ClassPrepareEvent) {
103 // watch field on loaded class 118 // watch field on loaded class
105 ClassPrepareEvent classPrepEvent = (ClassPrepareEvent) event; 120 ClassPrepareEvent classPrepEvent = (ClassPrepareEvent) event;
106 ReferenceType refType = classPrepEvent 121 ReferenceType refType = classPrepEvent
107 .referenceType(); 122 .referenceType();
108 addFieldWatch(vm, refType); 123 addFieldWatch(vm, refType);
109 } else if (event instanceof ModificationWatchpointEvent) { 124 } else if (event instanceof ModificationWatchpointEvent) {
110 watched++;
111 System.out.println("sleep for 500 ms"); 125 System.out.println("sleep for 500 ms");
112 Thread.sleep(500); 126 Thread.sleep(500);
127 System.out.println("resume...");
113 128
114 ModificationWatchpointEvent modEvent = (ModificationWatchpointEvent) event; 129 ModificationWatchpointEvent modEvent = (ModificationWatchpointEvent) event;
115 System.out.println("old=" 130 System.out.println("old="
116 + modEvent.valueCurrent()); 131 + modEvent.valueCurrent());
117 System.out.println("new=" + modEvent.valueToBe()); 132 System.out.println("new=" + modEvent.valueToBe());
133 System.out.println();
118 } 134 }
119 } 135 }
120 System.out.println("resume...");
121 eventSet.resume(); 136 eventSet.resume();
122 } 137 }
123 // Shutdown begins when event thread terminates 138 // Shutdown begins when event thread terminates
124 try { 139 try {
125 errThread.join(); // Make sure output is forwarded 140 errThread.join(); // Make sure output is forwarded
126 outThread.join(); 141 outThread.join();
127 } catch (InterruptedException exc) { 142 } catch (InterruptedException exc) {
128 // we don't interrupt 143 // we don't interrupt
129 }
130
131 if (watched != 11) { // init + 10 modifications in TestPostFieldModification class
132 throw new Error("Expected to receive 11 times ModificationWatchpointEvent, but got "+watched);
133 } 144 }
134 } 145 }
135 146
136 /** 147 /**
137 * Find a com.sun.jdi.CommandLineLaunch connector 148 * Find a com.sun.jdi.CommandLineLaunch connector