From db3a771cffc9ae360609fb1b13d68464da0cf1d1 Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Thu, 13 Apr 2017 09:43:34 +0200 Subject: [PATCH] synchronize on FSCM --- .../oracle/truffle/r/nodes/function/ArgumentStatePush.java | 5 ++++- .../truffle/r/nodes/function/PostProcessArgumentsNode.java | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java index 605d628d4f..4c9b9aa0b6 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java @@ -38,6 +38,7 @@ import com.oracle.truffle.r.runtime.data.RLanguage; import com.oracle.truffle.r.runtime.data.RShareable; import com.oracle.truffle.r.runtime.data.RSharingAttributeStorage; import com.oracle.truffle.r.runtime.data.model.RAbstractContainer; +import com.oracle.truffle.r.runtime.env.frame.FrameSlotChangeMonitor; /** * A {@link ArgumentStatePush} is used to bump up state transition for function arguments. @@ -98,7 +99,9 @@ public abstract class ArgumentStatePush extends Node { if (writeArgMask != -1 && !FastROptions.RefCountIncrementOnly.getBooleanValue()) { if (frameSlot == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); - frameSlot = frame.getFrameDescriptor().findOrAddFrameSlot(writeArgMask, FrameSlotKind.Object); + synchronized (FrameSlotChangeMonitor.class) { + frameSlot = frame.getFrameDescriptor().findOrAddFrameSlot(writeArgMask, FrameSlotKind.Object); + } } frame.setObject(frameSlot, shareable); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PostProcessArgumentsNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PostProcessArgumentsNode.java index bb1d668a60..f5f59a4459 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PostProcessArgumentsNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PostProcessArgumentsNode.java @@ -34,6 +34,7 @@ import com.oracle.truffle.api.utilities.AssumedValue; import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RShareable; +import com.oracle.truffle.r.runtime.env.frame.FrameSlotChangeMonitor; import com.oracle.truffle.r.runtime.nodes.RNode; /** @@ -73,7 +74,9 @@ public final class PostProcessArgumentsNode extends RNode { if ((bits & mask) != 0) { if (frameSlots[i] == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); - frameSlots[i] = frame.getFrameDescriptor().findOrAddFrameSlot(mask, FrameSlotKind.Object); + synchronized (FrameSlotChangeMonitor.class) { + frameSlots[i] = frame.getFrameDescriptor().findOrAddFrameSlot(mask, FrameSlotKind.Object); + } } RShareable s; try { -- GitLab