changeset 21902:e9b787f8134f

Truffle: make transitionMap a ConcurrentHashMap
author Andreas Woess <andreas.woess@oracle.com>
date Wed, 10 Jun 2015 20:06:17 +0200
parents 19340125f182
children 5ebd0a25abe4
files graal/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeImpl.java
diffstat 1 files changed, 9 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeImpl.java	Wed Jun 10 20:06:13 2015 +0200
+++ b/graal/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeImpl.java	Wed Jun 10 20:06:17 2015 +0200
@@ -23,6 +23,7 @@
 package com.oracle.truffle.object;
 
 import java.util.*;
+import java.util.concurrent.*;
 
 import com.oracle.truffle.api.*;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
@@ -90,7 +91,7 @@
      * @see #getTransitionMapForRead()
      * @see #getTransitionMapForWrite()
      */
-    private HashMap<Transition, ShapeImpl> transitionMap;
+    private volatile Map<Transition, ShapeImpl> transitionMap;
 
     private final Transition transitionFromParent;
 
@@ -303,8 +304,13 @@
         if (transitionMap != null) {
             return transitionMap;
         } else {
-            invalidateLeafAssumption();
-            return transitionMap = new HashMap<>();
+            synchronized (getMutex()) {
+                if (transitionMap != null) {
+                    return transitionMap;
+                }
+                invalidateLeafAssumption();
+                return transitionMap = new ConcurrentHashMap<>();
+            }
         }
     }