Skip to content

Commit b68bf3c

Browse files
committed
Use HeapOperations.initializeReferences(heap) when accessing guest language references
1 parent a7f4f17 commit b68bf3c

File tree

7 files changed

+38
-26
lines changed

7 files changed

+38
-26
lines changed

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/TruffleObjectMergedFields.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ abstract class TruffleObjectMergedFields<O extends TruffleObject> {
8989

9090
protected abstract boolean filtersFields();
9191
protected abstract boolean includeField(FieldValue field);
92-
protected abstract Collection<FieldValue> getFields(O object);
92+
protected abstract Collection<FieldValue> getFields(O object) throws InterruptedException;
9393

9494

9595
private int objectsCount() { return objects.getObjectsCount(); }
@@ -158,19 +158,21 @@ private Set<FieldDescriptor> getAllObjectsFields(Progress progress) throws Inter
158158
}
159159

160160
private FieldValue getValueOfField(O object, String name) {
161-
Collection<FieldValue> fieldValues = getFields(object);
162-
if (fieldValues == null) return null;
161+
try {
162+
Collection<FieldValue> fieldValues = getFields(object);
163+
if (fieldValues == null) return null;
163164

164-
ArrayList<FieldValue> fieldValuesArr = fieldValues instanceof ArrayList ?
165-
(ArrayList<FieldValue>)fieldValues : new ArrayList(fieldValues);
165+
ArrayList<FieldValue> fieldValuesArr = fieldValues instanceof ArrayList ?
166+
(ArrayList<FieldValue>)fieldValues : new ArrayList(fieldValues);
166167

167-
for (int i = fieldValuesArr.size() - 1; i >= 0; i--) {
168-
FieldValue fv = fieldValuesArr.get(i);
169-
Field field = fv.getField();
170-
String fieldN = field.getName();
171-
if (field.isStatic()) fieldN = "static " + fieldN; // NOI18N
172-
if (fieldN.equals(name)) return fv;
173-
}
168+
for (int i = fieldValuesArr.size() - 1; i >= 0; i--) {
169+
FieldValue fv = fieldValuesArr.get(i);
170+
Field field = fv.getField();
171+
String fieldN = field.getName();
172+
if (field.isStatic()) fieldN = "static " + fieldN; // NOI18N
173+
if (fieldN.equals(name)) return fv;
174+
}
175+
} catch (InterruptedException e) {}
174176

175177
return null;
176178
}

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/TruffleObjectMergedReferences.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ abstract class TruffleObjectMergedReferences<O extends TruffleObject> {
8181

8282
protected abstract boolean filtersReferences();
8383
protected abstract boolean includeReference(FieldValue field);
84-
protected abstract Collection<FieldValue> getReferences(O object);
84+
protected abstract Collection<FieldValue> getReferences(O object) throws InterruptedException;
8585

8686
protected abstract HeapViewerNode createForeignReferenceNode(Instance instance, FieldValue field);
8787

@@ -204,11 +204,13 @@ protected ProgressIterator<O> objectsIterator(int index, Progress _progress) {
204204
@Override
205205
protected boolean exclude(O object) {
206206
progress.step();
207-
Collection<FieldValue> references = getReferences(object);
208-
for (FieldValue reference : references) {
209-
if (referer.equals(reference.getDefiningInstance()))
210-
return false;
211-
}
207+
try {
208+
Collection<FieldValue> references = getReferences(object);
209+
for (FieldValue reference : references) {
210+
if (referer.equals(reference.getDefiningInstance()))
211+
return false;
212+
}
213+
} catch (InterruptedException e) {}
212214
return true;
213215
}
214216
};

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/TruffleObjectPropertyProvider.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ protected final L getLanguage() {
110110
public abstract boolean supportsNode(HeapViewerNode node, Heap heap, String viewID);
111111

112112

113-
protected abstract Collection<I> getPropertyItems(O object, Heap heap);
113+
protected abstract Collection<I> getPropertyItems(O object, Heap heap) throws InterruptedException;
114114

115115
protected boolean includeItem(I item) { return true; }
116116

@@ -264,7 +264,7 @@ protected HeapViewerNode[] getNodes(TruffleObjectsWrapper<O> objects, HeapViewer
264264
protected TruffleLanguage getLanguage() { return Fields.this.getLanguage(); }
265265
protected boolean filtersFields() { return filtersProperties(); }
266266
protected boolean includeField(FieldValue field) { return includeItem(field); }
267-
protected Collection<FieldValue> getFields(O object) { return getPropertyItems(object, heap); }
267+
protected Collection<FieldValue> getFields(O object) throws InterruptedException { return getPropertyItems(object, heap); }
268268
}.getNodes(parent, viewID, viewFilter, dataTypes, sortOrders, progress);
269269
}
270270

@@ -274,7 +274,7 @@ protected HeapViewerNode[] getNodes(TruffleObjectsWrapper<O> objects, HeapViewer
274274
public static abstract class References<O extends TruffleObject, T extends TruffleType<O>, F extends TruffleLanguageHeapFragment<O, T>, L extends TruffleLanguage<O, T, F>> extends TruffleObjectPropertyProvider<O, T, F, L, FieldValue> {
275275

276276
protected References(String propertyName, L language, boolean filtersProperties) {
277-
super(propertyName, language, true, filtersProperties, UIThresholds.MAX_INSTANCE_REFERENCES);
277+
super(propertyName, language, false, filtersProperties, UIThresholds.MAX_INSTANCE_REFERENCES);
278278
}
279279

280280

@@ -332,7 +332,7 @@ protected HeapViewerNode[] getNodes(final TruffleObjectsWrapper<O> objects, Heap
332332
protected TruffleLanguage getLanguage() { return References.this.getLanguage(); }
333333
protected boolean filtersReferences() { return filtersProperties(); }
334334
protected boolean includeReference(FieldValue field) { return includeItem(field); }
335-
protected Collection<FieldValue> getReferences(O object) { return getPropertyItems(object, heap); }
335+
protected Collection<FieldValue> getReferences(O object) throws InterruptedException { return getPropertyItems(object, heap); }
336336
protected HeapViewerNode createForeignReferenceNode(Instance instance, FieldValue field) { return References.this.createForeignReferenceNode(instance, field, heap); }
337337
}.getNodes(parent, viewID, viewFilter, dataTypes, sortOrders, progress);
338338
}

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/lang/javascript/JavaScriptObjectProperties.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.util.ArrayList;
3131
import java.util.Collection;
3232
import java.util.List;
33+
import org.graalvm.visualvm.heapviewer.utils.HeapOperations;
3334
import org.graalvm.visualvm.lib.jfluid.heap.ArrayItemValue;
3435
import org.graalvm.visualvm.lib.jfluid.heap.FieldValue;
3536
import org.graalvm.visualvm.lib.jfluid.heap.Heap;
@@ -162,7 +163,8 @@ protected HeapViewerNode createObjectReferenceNode(JavaScriptObject object, Stri
162163
}
163164

164165
@Override
165-
protected Collection<FieldValue> getPropertyItems(JavaScriptObject object, Heap heap) {
166+
protected Collection<FieldValue> getPropertyItems(JavaScriptObject object, Heap heap) throws InterruptedException {
167+
HeapOperations.initializeReferences(heap);
166168
return object.getReferences();
167169
}
168170

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/lang/python/PythonObjectProperties.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.graalvm.visualvm.heapviewer.truffle.TruffleObjectPropertyProvider;
3030
import java.util.Collection;
3131
import java.util.List;
32+
import org.graalvm.visualvm.heapviewer.utils.HeapOperations;
3233
import org.graalvm.visualvm.lib.jfluid.heap.FieldValue;
3334
import org.graalvm.visualvm.lib.jfluid.heap.Heap;
3435
import org.graalvm.visualvm.lib.jfluid.heap.Instance;
@@ -208,7 +209,8 @@ protected HeapViewerNode createForeignReferenceNode(Instance instance, FieldValu
208209
}
209210

210211
@Override
211-
protected Collection<FieldValue> getPropertyItems(PythonObject object, Heap heap) {
212+
protected Collection<FieldValue> getPropertyItems(PythonObject object, Heap heap) throws InterruptedException {
213+
HeapOperations.initializeReferences(heap);
212214
return object.getReferences();
213215
}
214216

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/lang/r/RObjectProperties.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.util.ArrayList;
3333
import java.util.Collection;
3434
import java.util.List;
35+
import org.graalvm.visualvm.heapviewer.utils.HeapOperations;
3536
import org.graalvm.visualvm.lib.jfluid.heap.FieldValue;
3637
import org.graalvm.visualvm.lib.jfluid.heap.Heap;
3738
import org.graalvm.visualvm.lib.jfluid.heap.Instance;
@@ -230,7 +231,8 @@ protected HeapViewerNode createForeignReferenceNode(Instance instance, FieldValu
230231
}
231232

232233
@Override
233-
protected Collection<FieldValue> getPropertyItems(RObject object, Heap heap) {
234+
protected Collection<FieldValue> getPropertyItems(RObject object, Heap heap) throws InterruptedException {
235+
HeapOperations.initializeReferences(heap);
234236
return object.getReferences();
235237
}
236238

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/lang/ruby/RubyObjectProperties.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.util.ArrayList;
3131
import java.util.Collection;
3232
import java.util.List;
33+
import org.graalvm.visualvm.heapviewer.utils.HeapOperations;
3334
import org.graalvm.visualvm.lib.jfluid.heap.ArrayItemValue;
3435
import org.graalvm.visualvm.lib.jfluid.heap.FieldValue;
3536
import org.graalvm.visualvm.lib.jfluid.heap.Heap;
@@ -161,7 +162,8 @@ protected HeapViewerNode createObjectReferenceNode(RubyObject object, String typ
161162
}
162163

163164
@Override
164-
protected Collection<FieldValue> getPropertyItems(RubyObject object, Heap heap) {
165+
protected Collection<FieldValue> getPropertyItems(RubyObject object, Heap heap) throws InterruptedException {
166+
HeapOperations.initializeReferences(heap);
165167
return object.getReferences();
166168
}
167169

0 commit comments

Comments
 (0)