Skip to content

Commit 2fb1e12

Browse files
committed
support for GraalVM 22.2.0 added
1 parent a5a99d1 commit 2fb1e12

File tree

1 file changed

+34
-6
lines changed
  • visualvm/sampler.truffle/libsrc/org/graalvm/visualvm/sampler/truffle/stagent

1 file changed

+34
-6
lines changed

visualvm/sampler.truffle/libsrc/org/graalvm/visualvm/sampler/truffle/stagent/Truffle.java

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -165,15 +165,37 @@ private Method getFindActiveEngines() {
165165
}
166166

167167
private Map getEngines() {
168+
Map engines = null;
168169
try {
169-
Class POLY_CLASS = Class.forName(POLYGLOTENGINEIMPL_CLASS_NAME);
170-
Field f = POLY_CLASS.getDeclaredField("ENGINES");
171-
Object base = unsafe.staticFieldBase(f);
172-
return (Map) unsafe.getObject(base, unsafe.staticFieldOffset(f));
170+
engines = getEnginesFromClass(Engine.class);
171+
if (engines == null) {
172+
Class POLY_CLASS = Class.forName(POLYGLOTENGINEIMPL_CLASS_NAME);
173+
engines = getEnginesFromClass(POLY_CLASS);
174+
}
173175
} catch (ClassNotFoundException ex) {
174176
Logger.getLogger(Truffle.class.getName()).log(Level.SEVERE, null, ex);
177+
} catch (SecurityException ex) {
178+
Logger.getLogger(Truffle.class.getName()).log(Level.SEVERE, null, ex);
179+
}
180+
return engines;
181+
}
182+
183+
private Map getEnginesFromClass(Class engineClass) {
184+
try {
185+
Field f = engineClass.getDeclaredField("ENGINES");
186+
return getEnginesFromField(f);
175187
} catch (NoSuchFieldException ex) {
188+
Logger.getLogger(Truffle.class.getName()).log(TruffleJMX.DEBUG ? Level.INFO : Level.FINE, null, ex);
189+
} catch (SecurityException ex) {
176190
Logger.getLogger(Truffle.class.getName()).log(Level.SEVERE, null, ex);
191+
}
192+
return null;
193+
}
194+
195+
private Map getEnginesFromField(Field f) {
196+
try {
197+
Object base = unsafe.staticFieldBase(f);
198+
return (Map) unsafe.getObject(base, unsafe.staticFieldOffset(f));
177199
} catch (SecurityException ex) {
178200
Logger.getLogger(Truffle.class.getName()).log(Level.SEVERE, null, ex);
179201
}
@@ -185,8 +207,14 @@ private Collection<Engine> getAllEngineInstances() {
185207
if (Engine_findActiveEngines == null) {
186208
Collection<Engine> en = new ArrayList();
187209
for (Object o : engines.keySet()) {
188-
Field cf = TruffleJMX.getDeclaredField(o, "creatorApi", "api");
189-
Engine e = (Engine) unsafe.getObject(o, unsafe.objectFieldOffset(cf));
210+
Engine e;
211+
212+
if (o instanceof Engine) {
213+
e = (Engine) o;
214+
} else {
215+
Field cf = TruffleJMX.getDeclaredField(o, "creatorApi", "api");
216+
e = (Engine) unsafe.getObject(o, unsafe.objectFieldOffset(cf));
217+
}
190218
en.add(e);
191219
}
192220
return en;

0 commit comments

Comments
 (0)