Skip to content

Commit 6076f9d

Browse files
committed
Transient IllegalArgumentException: Unknown language or instrument id com_oracle_truffle_api_test_polyglot_polyglotgctest_valuegclanguage.
1 parent c97cbac commit 6076f9d

File tree

3 files changed

+40
-11
lines changed

3 files changed

+40
-11
lines changed

truffle/src/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLogger.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1046,8 +1046,8 @@ private TruffleLogger getOrCreateLogger(final String loggerName) {
10461046
}
10471047

10481048
private TruffleLogger getOrCreateLogger(final String id, final String loggerName) {
1049-
if (!LanguageAccessor.ENGINE.isKnownLoggerId(id)) {
1050-
throw new IllegalArgumentException("Unknown language or instrument id " + id + ", known ids: " + String.join(", ", LanguageAccessor.ENGINE.getKnownLoggerIds()));
1049+
if (!LanguageAccessor.ENGINE.isKnownLoggerId(loggerCache, id)) {
1050+
throw new IllegalArgumentException("Unknown language or instrument id " + id + ", known ids: " + String.join(", ", LanguageAccessor.ENGINE.getKnownLoggerIds(loggerCache)));
10511051
}
10521052
final String globalLoggerId = loggerName == null || loggerName.isEmpty() ? id : id + '.' + loggerName;
10531053
return getOrCreateLogger(globalLoggerId);

truffle/src/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -554,9 +554,9 @@ public abstract Thread createThread(Object polyglotLanguageContext, Runnable run
554554

555555
public abstract LogRecord createLogRecord(Object loggerCache, Level level, String loggerName, String message, String className, String methodName, Object[] parameters, Throwable thrown);
556556

557-
public abstract boolean isKnownLoggerId(String id);
557+
public abstract boolean isKnownLoggerId(Object loggerCache, String id);
558558

559-
public abstract Collection<String> getKnownLoggerIds();
559+
public abstract Collection<String> getKnownLoggerIds(Object loggerCache);
560560

561561
public abstract boolean isContextBoundLogger(Object loggerCache);
562562

truffle/src/com.oracle.truffle.polyglot/src/com/oracle/truffle/polyglot/EngineAccessor.java

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1435,16 +1435,45 @@ public LogRecord createLogRecord(Object loggerCache, Level level, String loggerN
14351435
}
14361436

14371437
@Override
1438-
public boolean isKnownLoggerId(String id) {
1439-
return PolyglotLoggers.getInternalIds().contains(id) || LanguageCache.languages().containsKey(id) || InstrumentCache.load().containsKey(id);
1438+
public boolean isKnownLoggerId(Object loggerCache, String id) {
1439+
if (PolyglotLoggers.getInternalIds().contains(id)) {
1440+
return true;
1441+
}
1442+
PolyglotEngineImpl polyglotEngine = lookupPolyglotEngineForLoggerCache(loggerCache);
1443+
if (polyglotEngine != null) {
1444+
return polyglotEngine.idToLanguage.containsKey(id) || polyglotEngine.idToInstrument.containsKey(id);
1445+
} else {
1446+
/*
1447+
* TruffleLogger#getLogger() is invoked from a static initializer, no vmObject
1448+
* anchor is available at this point.
1449+
*/
1450+
return LanguageCache.languages().containsKey(id) || InstrumentCache.load().containsKey(id);
1451+
}
1452+
}
1453+
1454+
private static PolyglotEngineImpl lookupPolyglotEngineForLoggerCache(Object loggerCache) {
1455+
VMObject vmObject = ((PolyglotLoggers.LoggerCache) loggerCache).getOwner();
1456+
if (vmObject == null) {
1457+
vmObject = PolyglotFastThreadLocals.getContext(null);
1458+
}
1459+
return vmObject != null ? vmObject.getEngine() : null;
14401460
}
14411461

14421462
@Override
1443-
public Collection<String> getKnownLoggerIds() {
1444-
List<String> ids = new ArrayList<>();
1445-
ids.addAll(PolyglotLoggers.getInternalIds());
1446-
ids.addAll(LanguageCache.languages().keySet());
1447-
ids.addAll(InstrumentCache.load().keySet());
1463+
public Collection<String> getKnownLoggerIds(Object loggerCache) {
1464+
List<String> ids = new ArrayList<>(PolyglotLoggers.getInternalIds());
1465+
PolyglotEngineImpl polyglotEngine = lookupPolyglotEngineForLoggerCache(loggerCache);
1466+
if (polyglotEngine != null) {
1467+
ids.addAll(polyglotEngine.idToLanguage.keySet());
1468+
ids.addAll(polyglotEngine.idToInstrument.keySet());
1469+
} else {
1470+
/*
1471+
* TruffleLogger#getLogger() is invoked from a static initializer, no vmObject
1472+
* anchor is available at this point.
1473+
*/
1474+
ids.addAll(LanguageCache.languages().keySet());
1475+
ids.addAll(InstrumentCache.load().keySet());
1476+
}
14481477
Collections.sort(ids);
14491478
return ids;
14501479
}

0 commit comments

Comments
 (0)