From 711086cc3829b86e7f68067c94c1e38ff478f52a Mon Sep 17 00:00:00 2001
From: Florian Angerer <florian.angerer@oracle.com>
Date: Thu, 10 Aug 2017 13:58:46 +0200
Subject: [PATCH] Fixed race in RInternalCode.

---
 .../com/oracle/truffle/r/runtime/RInternalCode.java    | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RInternalCode.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RInternalCode.java
index a5287eceb2..2a29784e9d 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RInternalCode.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RInternalCode.java
@@ -44,7 +44,7 @@ public final class RInternalCode {
     private final String basePackage;
     private final Source source;
 
-    private REnvironment evaluatedEnvironment;
+    private volatile REnvironment evaluatedEnvironment;
 
     private RInternalCode(RContext context, String basePackage, Source source) {
         this.context = context;
@@ -57,7 +57,7 @@ public final class RInternalCode {
         return Utils.getResourceAsSource(clazz, fileName);
     }
 
-    private REnvironment evaluate() {
+    private synchronized REnvironment evaluate() {
         try {
             RExpression parsedCode = context.getThisEngine().parse(source);
             REnvironment statsPackage = REnvironment.getRegisteredNamespace(context, basePackage);
@@ -72,13 +72,15 @@ public final class RInternalCode {
         }
     }
 
-    public RFunction lookupFunction(String name) {
+    public synchronized RFunction lookupFunction(String name) {
         REnvironment env = this.evaluatedEnvironment;
         if (env == null) {
             env = evaluate();
             this.evaluatedEnvironment = env;
         }
-        return (RFunction) env.get(name);
+        RFunction fun = (RFunction) env.get(name);
+        assert fun != null;
+        return fun;
     }
 
     public static RInternalCode lookup(RContext context, String basePackage, Source source) {
-- 
GitLab