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;
             }