# HG changeset patch # User Doug Simon # Date 1428609787 -7200 # Node ID 673e0b242d4db9750215538454ab2b44ef43ad73 # Parent 5d9bad7192f80922801a6a4c76ab685e9b0f4c73 fixed race in HotSpotResolvedJavaFieldImpl.getType() diff -r 5d9bad7192f8 -r 673e0b242d4d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java Thu Apr 09 21:23:24 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java Thu Apr 09 22:03:07 2015 +0200 @@ -149,9 +149,13 @@ @Override public JavaType getType() { - if (type instanceof HotSpotUnresolvedJavaType) { + // Pull field into local variable to prevent a race causing + // a ClassCastException below + JavaType currentType = type; + if (currentType instanceof HotSpotUnresolvedJavaType) { // Don't allow unresolved types to hang around forever - ResolvedJavaType resolved = ((HotSpotUnresolvedJavaType) type).reresolve(holder); + HotSpotUnresolvedJavaType unresolvedType = (HotSpotUnresolvedJavaType) currentType; + ResolvedJavaType resolved = unresolvedType.reresolve(holder); if (resolved != null) { type = resolved; }