From 3740696d78274ed6710689604916d6e600f8d5db Mon Sep 17 00:00:00 2001
From: Florian Angerer <florian.angerer@oracle.com>
Date: Mon, 16 Oct 2017 10:52:01 +0200
Subject: [PATCH] Do not initialize FD cache lazily to avoid possible races.

---
 .../com/oracle/truffle/r/runtime/env/REnvironment.java    | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/REnvironment.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/REnvironment.java
index 26b0eff1a7..aea39489db 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/REnvironment.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/REnvironment.java
@@ -116,7 +116,7 @@ import com.oracle.truffle.r.runtime.env.frame.REnvTruffleFrameAccess;
 public abstract class REnvironment extends RAttributeStorage {
 
     public static final class ContextStateImpl implements RContext.ContextState {
-        private static Map<RStringVector, WeakReference<FrameDescriptor>> frameDescriptorCache;
+        private static Map<RStringVector, WeakReference<FrameDescriptor>> frameDescriptorCache = Collections.synchronizedMap(new WeakHashMap<>(0));
 
         private final MaterializedFrame globalFrame;
         @CompilationFinal private Base baseEnv;
@@ -187,13 +187,7 @@ public abstract class REnvironment extends RAttributeStorage {
         public static FrameDescriptor getFrameDescriptorFromList(RList list) {
             CompilerAsserts.neverPartOfCompilation();
 
-            // create lazily
-            if (frameDescriptorCache == null) {
-                frameDescriptorCache = Collections.synchronizedMap(new WeakHashMap<>());
-            }
-
             RStringVector names = list.getNames();
-
             WeakReference<FrameDescriptor> weakReference = frameDescriptorCache.get(names);
             FrameDescriptor fd = weakReference != null ? weakReference.get() : null;
 
-- 
GitLab