Skip to content

Commit a5218e4

Browse files
committed
Make the lazily initialized callTargets array volatile (GR-40520)
The array is initialized by copying existing CallTargets. If the field is not volatile, then the array may be published to other threads before all its values are fully initialized.
1 parent 77fa78b commit a5218e4

File tree

2 files changed

+2
-2
lines changed

2 files changed

+2
-2
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/function/GeneratorExpressionNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
public final class GeneratorExpressionNode extends ExpressionDefinitionNode {
4646
private final TruffleString name;
4747
private final TruffleString qualname;
48-
@CompilationFinal(dimensions = 1) private RootCallTarget[] callTargets;
48+
@CompilationFinal(dimensions = 1) private volatile RootCallTarget[] callTargets;
4949
private final FrameDescriptor frameDescriptor;
5050
private final GeneratorInfo generatorInfo;
5151

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/generator/GeneratorFunctionRootNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363

6464
public class GeneratorFunctionRootNode extends PClosureFunctionRootNode {
6565
private final RootCallTarget callTarget;
66-
@CompilationFinal(dimensions = 1) private RootCallTarget[] callTargets;
66+
@CompilationFinal(dimensions = 1) private volatile RootCallTarget[] callTargets;
6767
private final FrameDescriptor frameDescriptor;
6868
private final GeneratorInfo generatorInfo;
6969
private final ExecutionCellSlots cellSlots;

0 commit comments

Comments
 (0)