Mercurial > hg > graal-jvmci-8
changeset 20878:673e0b242d4d
fixed race in HotSpotResolvedJavaFieldImpl.getType()
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Thu, 09 Apr 2015 22:03:07 +0200 |
parents | 5d9bad7192f8 |
children | 550e422e5483 |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java |
diffstat | 1 files changed, 6 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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; }