Skip to content

Commit c9df26c

Browse files
committed
Cancel worker threads whenever their view is closed, including closing the heap viewer itself.
1 parent 831fdec commit c9df26c

22 files changed

+217
-25
lines changed

visualvm/heapdump/nbproject/project.xml

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,59 +39,59 @@
3939
<compile-dependency/>
4040
<run-dependency>
4141
<release-version>0</release-version>
42-
<specification-version>1.0</specification-version>
42+
<specification-version>1.2</specification-version>
4343
</run-dependency>
4444
</dependency>
4545
<dependency>
46-
<code-name-base>org.graalvm.visualvm.tools</code-name-base>
46+
<code-name-base>org.graalvm.visualvm.lib.jfluid</code-name-base>
4747
<build-prerequisite/>
4848
<compile-dependency/>
4949
<run-dependency>
50-
<release-version>0</release-version>
51-
<specification-version>1.2</specification-version>
50+
<release-version>1</release-version>
51+
<specification-version>1.10.1</specification-version>
5252
</run-dependency>
5353
</dependency>
5454
<dependency>
55-
<code-name-base>org.netbeans.api.progress</code-name-base>
55+
<code-name-base>org.graalvm.visualvm.lib.profiler</code-name-base>
5656
<build-prerequisite/>
5757
<compile-dependency/>
5858
<run-dependency>
59-
<release-version>1</release-version>
60-
<specification-version>1.48</specification-version>
59+
<release-version>3</release-version>
60+
<specification-version>3.28</specification-version>
6161
</run-dependency>
6262
</dependency>
6363
<dependency>
64-
<code-name-base>org.netbeans.api.progress.nb</code-name-base>
64+
<code-name-base>org.graalvm.visualvm.lib.profiler.heapwalker</code-name-base>
6565
<build-prerequisite/>
6666
<compile-dependency/>
6767
<run-dependency>
68-
<specification-version>1.48</specification-version>
68+
<specification-version>1.1</specification-version>
6969
</run-dependency>
7070
</dependency>
7171
<dependency>
72-
<code-name-base>org.graalvm.visualvm.lib.jfluid</code-name-base>
72+
<code-name-base>org.graalvm.visualvm.tools</code-name-base>
7373
<build-prerequisite/>
7474
<compile-dependency/>
7575
<run-dependency>
76-
<release-version>1</release-version>
77-
<specification-version>1.10.1</specification-version>
76+
<release-version>0</release-version>
77+
<specification-version>1.2</specification-version>
7878
</run-dependency>
7979
</dependency>
8080
<dependency>
81-
<code-name-base>org.graalvm.visualvm.lib.profiler</code-name-base>
81+
<code-name-base>org.netbeans.api.progress</code-name-base>
8282
<build-prerequisite/>
8383
<compile-dependency/>
8484
<run-dependency>
85-
<release-version>3</release-version>
86-
<specification-version>3.28</specification-version>
85+
<release-version>1</release-version>
86+
<specification-version>1.48</specification-version>
8787
</run-dependency>
8888
</dependency>
8989
<dependency>
90-
<code-name-base>org.graalvm.visualvm.lib.profiler.heapwalker</code-name-base>
90+
<code-name-base>org.netbeans.api.progress.nb</code-name-base>
9191
<build-prerequisite/>
9292
<compile-dependency/>
9393
<run-dependency>
94-
<specification-version>1.1</specification-version>
94+
<specification-version>1.48</specification-version>
9595
</run-dependency>
9696
</dependency>
9797
<dependency>

visualvm/heapdump/src/org/graalvm/visualvm/heapdump/impl/HeapDumpView.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,13 @@
5252
* @author Tomas Hurka
5353
*/
5454
class HeapDumpView extends DataSourceView {
55+
5556
private final static Logger LOGGER = Logger.getLogger(HeapDumpView.class.getName());
5657

58+
59+
private MasterViewSupport mvs;
60+
61+
5762
public HeapDumpView(HeapDump heapDump) {
5863
this(heapDump, DataSourceDescriptorFactory.getDescriptor(heapDump));
5964
}
@@ -65,8 +70,8 @@ private HeapDumpView(HeapDump heapDump, DataSourceDescriptor descriptor) {
6570

6671
protected DataViewComponent createComponent() {
6772
HeapDump heapDump = (HeapDump)getDataSource();
68-
DataViewComponent dvc = new DataViewComponent(
69-
new MasterViewSupport(heapDump).getMasterView(),
73+
mvs = new MasterViewSupport(heapDump);
74+
DataViewComponent dvc = new DataViewComponent(mvs.getMasterView(),
7075
new DataViewComponent.MasterViewConfiguration(true));
7176

7277
return dvc;
@@ -95,6 +100,12 @@ private static boolean isClosableView(HeapDump heapDump) {
95100
return false;
96101
}
97102

103+
protected void removed() {
104+
SwingUtilities.invokeLater(new Runnable() {
105+
public void run() { if (mvs != null) mvs.closed(); }
106+
});
107+
}
108+
98109

99110
// --- General data --------------------------------------------------------
100111

@@ -103,6 +114,8 @@ private static class MasterViewSupport extends JPanel {
103114
private JLabel progressLabel;
104115
private JPanel contentsPanel;
105116

117+
private HeapViewer heapViewer;
118+
106119
public MasterViewSupport(HeapDump heapDump) {
107120
File file = heapDump.getFile();
108121
initComponents(file != null);
@@ -115,6 +128,11 @@ public DataViewComponent.MasterView getMasterView() {
115128
}
116129

117130

131+
void closed() {
132+
if (heapViewer != null) heapViewer.closed();
133+
}
134+
135+
118136
private void initComponents(boolean hasDump) {
119137
setLayout(new BorderLayout());
120138

@@ -134,8 +152,9 @@ private void loadHeap(final File file) {
134152
RequestProcessor.getDefault().post(new Runnable() {
135153
public void run() {
136154
try {
137-
final HeapViewer heapViewer = new HeapViewer(file);
155+
final HeapViewer _heapViewer = new HeapViewer(file);
138156
SwingUtilities.invokeLater(new Runnable() { public void run() {
157+
heapViewer = _heapViewer;
139158
contentsPanel.remove(progressLabel);
140159
contentsPanel.add(heapViewer.getComponent(), BorderLayout.CENTER);
141160
contentsPanel.revalidate();

visualvm/heapviewer/manifest.mf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ AutoUpdate-Show-In-Client: false
33
AutoUpdate-Essential-Module: true
44
OpenIDE-Module: org.graalvm.visualvm.heapviewer/0
55
OpenIDE-Module-Localizing-Bundle: org/graalvm/visualvm/heapviewer/Bundle.properties
6-
OpenIDE-Module-Specification-Version: 1.1
6+
OpenIDE-Module-Specification-Version: 1.2
77

visualvm/heapviewer/nbproject/project.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
<compile-dependency/>
6666
<run-dependency>
6767
<release-version>0</release-version>
68-
<specification-version>1.6</specification-version>
68+
<specification-version>1.7</specification-version>
6969
</run-dependency>
7070
</dependency>
7171
<dependency>

visualvm/heapviewer/src/org/graalvm/visualvm/heapviewer/HeapViewer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ public JComponent getComponent() {
8787
if (component == null) component = new HeapViewerComponent(this);
8888
return component;
8989
}
90+
91+
92+
public void closed() {
93+
if (component != null) component.closed();
94+
}
9095

9196

9297
private static Heap createHeap(File heapFile) throws IOException {

visualvm/heapviewer/src/org/graalvm/visualvm/heapviewer/java/impl/ClassHierarchyPlugin.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,12 @@ protected JComponent createComponent() {
130130
}
131131

132132

133+
@Override
134+
protected void closed() {
135+
objectsView.closed();
136+
}
137+
138+
133139
protected void nodeSelected(HeapViewerNode node, boolean adjusting) {
134140
JavaClass sel = node == null ? null : HeapViewerNode.getValue(node, DataType.CLASS, heap);
135141

visualvm/heapviewer/src/org/graalvm/visualvm/heapviewer/java/impl/JavaDiffObjectsView.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,12 @@ public ProfilerToolbar getToolbar() {
230230
}
231231

232232

233+
@Override
234+
protected void closed() {
235+
objectsView.closed();
236+
}
237+
238+
233239
private synchronized void setAggregation(Aggregation aggregation) {
234240
this.aggregation = aggregation;
235241
objectsView.reloadView();

visualvm/heapviewer/src/org/graalvm/visualvm/heapviewer/java/impl/JavaFieldsPlugin.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,12 @@ protected JComponent createComponent() {
278278
}
279279

280280

281+
@Override
282+
protected void closed() {
283+
objectsView.closed();
284+
}
285+
286+
281287
private HeapViewerNode[] getClassFieldsHistogram(final InstancesWrapper instances, HeapViewerNode parent, Heap heap, String viewID, HeapViewerNodeFilter viewFilter, List<DataType> dataTypes, List<SortOrder> sortOrders, Progress progress) throws InterruptedException {
282288
final List<Field> fields = getAllInstanceFields(instances.getJavaClass());
283289
NodesComputer<Field> computer = new NodesComputer<Field>(fields.size(), UIThresholds.MAX_INSTANCE_FIELDS) {

visualvm/heapviewer/src/org/graalvm/visualvm/heapviewer/java/impl/JavaObjectsView.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,12 @@ public ProfilerToolbar getToolbar() {
217217
}
218218

219219

220+
@Override
221+
protected void closed() {
222+
objectsView.closed();
223+
}
224+
225+
220226
private volatile boolean skipReload = false;
221227

222228
void configureClassesByInstancesCount() {

visualvm/heapviewer/src/org/graalvm/visualvm/heapviewer/java/impl/JavaPreviewPlugin.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ protected JComponent createComponent() {
7575
}
7676

7777

78+
@Override
79+
protected void closed() {
80+
// TODO: should cancel the preview
81+
}
82+
83+
7884
protected void nodeSelected(HeapViewerNode node, boolean adjusting) {
7985
component.showInstance(node == null ? null : HeapViewerNode.getValue(node, DataType.INSTANCE, heap));
8086
}

0 commit comments

Comments
 (0)