Skip to content

Commit 6db1203

Browse files
Only apply special Cleaner behaviour to jdk<9
1 parent 90951f2 commit 6db1203

File tree

3 files changed

+8
-10
lines changed

3 files changed

+8
-10
lines changed

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/descriptors/EspressoSymbols.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,6 @@ public static void ensureInitialized() {
323323
public static final Symbol<Type> java_lang_ref_Reference$Lock = SYMBOLS.putType("Ljava/lang/ref/Reference$Lock;");
324324

325325
public static final Symbol<Type> sun_misc_Cleaner = SYMBOLS.putType("Lsun/misc/Cleaner;");
326-
public static final Symbol<Type> jdk_internal_ref_Cleaner = SYMBOLS.putType("Ljdk/internal/ref/Cleaner;");
327326

328327
public static final Symbol<Type> java_lang_StackTraceElement = SYMBOLS.putType("Ljava/lang/StackTraceElement;");
329328
public static final Symbol<Type> java_lang_StackTraceElement_array = SYMBOLS.putType("[Ljava/lang/StackTraceElement;");

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/meta/Meta.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -976,15 +976,12 @@ public Meta(EspressoContext context) {
976976
.klass();
977977
sun_reflect_ConstantPool_constantPoolOop = sun_reflect_ConstantPool.requireDeclaredField(Names.constantPoolOop, Types.java_lang_Object);
978978

979-
sun_misc_Cleaner = diff() //
980-
.klass(VERSION_8_OR_LOWER, Types.sun_misc_Cleaner) //
981-
.klass(VERSION_9_OR_HIGHER, Types.jdk_internal_ref_Cleaner) //
982-
.klass();
983-
984979
if (getJavaVersion().java8OrEarlier()) {
985980
java_lang_ref_Reference_pending = java_lang_ref_Reference.requireDeclaredField(Names.pending, Types.java_lang_ref_Reference);
981+
sun_misc_Cleaner = knownKlass(Types.sun_misc_Cleaner);
986982
} else {
987983
java_lang_ref_Reference_pending = null;
984+
sun_misc_Cleaner = null;
988985
}
989986
java_lang_ref_Reference_lock = diff() //
990987
.field(VERSION_8_OR_LOWER, Names.lock, Types.java_lang_ref_Reference$Lock) //

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/runtime/EspressoReferenceDrainer.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,12 +196,14 @@ private void doWaitForReferencePendingList() {
196196

197197
private void casNextIfNullAndMaybeClear(EspressoReference wrapper) {
198198
StaticObject ref = wrapper.getGuestReference();
199-
// Cleaner references extends PhantomReference but are cleared.
200-
// See HotSpot's ReferenceProcessor::process_discovered_references in referenceProcessor.cpp
201-
if (InterpreterToVM.instanceOf(ref, getMeta().sun_misc_Cleaner)) {
199+
Meta meta = getMeta();
200+
assert meta.sun_misc_Cleaner != null || getJavaVersion().java9OrLater();
201+
if (meta.sun_misc_Cleaner != null && InterpreterToVM.instanceOf(ref, meta.sun_misc_Cleaner)) {
202+
// Cleaner references extends PhantomReference but are cleared.
203+
// See HotSpot's ReferenceProcessor::process_discovered_references in referenceProcessor.cpp
202204
wrapper.clear();
203205
}
204-
getMeta().java_lang_ref_Reference_next.compareAndSwapObject(ref, StaticObject.NULL, ref);
206+
meta.java_lang_ref_Reference_next.compareAndSwapObject(ref, StaticObject.NULL, ref);
205207
}
206208

207209
private static final class ExitTLA extends ThreadLocalAction {

0 commit comments

Comments
 (0)