Skip to content

Commit 6979f9c

Browse files
committed
Use Env#isPreInitialization() instead of ImageInfo.inImageBuildtimeCode()
* Necessary to be correct during the pre-initialization of --engine.CacheStore.
1 parent 96df78a commit 6979f9c

File tree

21 files changed

+249
-256
lines changed

21 files changed

+249
-256
lines changed

graalpython/com.oracle.graal.python.shell/src/com/oracle/graal/python/shell/GraalPythonMain.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ protected List<String> preprocessArguments(List<String> givenArgs, Map<String, S
411411
}
412412
}
413413

414-
if (!ImageInfo.inImageCode()) {
414+
if (!isAOT()) {
415415
for (String arg : ManagementFactory.getRuntimeMXBean().getInputArguments()) {
416416
if (arg.equals("-ea")) {
417417
addRelaunchArg("--vm.ea");
@@ -623,7 +623,7 @@ private String[] getExecutableList() {
623623
}
624624

625625
// This should only be reached if this main is directly executed via Java.
626-
if (!ImageInfo.inImageCode()) {
626+
if (!isAOT()) {
627627
StringBuilder sb = new StringBuilder();
628628
ArrayList<String> exec_list = new ArrayList<>();
629629
sb.append(System.getProperty("java.home")).append(File.separator).append("bin").append(File.separator).append("java");

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/PythonLanguage.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
import java.util.logging.Level;
5454

5555
import org.graalvm.home.Version;
56-
import org.graalvm.nativeimage.ImageInfo;
5756
import org.graalvm.options.OptionDescriptors;
5857
import org.graalvm.options.OptionKey;
5958
import org.graalvm.options.OptionValues;
@@ -385,8 +384,8 @@ public StructSequence.DescriptorCallTargets getOrCreateStructSequenceCallTargets
385384
return factory.apply(descriptor);
386385
}
387386
if (descriptor instanceof BuiltinTypeDescriptor builtinDescriptor) {
388-
// There must be finite set of objects initialized at build time, no need for a weak map
389-
assert !ImageInfo.inImageCode() || builtinDescriptor.wasInitializedAtBuildTime();
387+
// There must be finite set of objects initialized in static final fields, no need for a
388+
// weak map
390389
return structSequenceBuiltinTargets.computeIfAbsent(builtinDescriptor, factory);
391390
}
392391
return getOrCreateStructSeqNonBuiltinTargets(descriptor, factory);
@@ -498,6 +497,7 @@ protected boolean patchContext(PythonContext context, Env newEnv) {
498497
Python3Core.writeInfo("Cannot use preinitialized context.");
499498
return false;
500499
}
500+
context.resetPerfCounter();
501501
context.initializeHomeAndPrefixPaths(newEnv, getLanguageHome());
502502
Python3Core.writeInfo("Using preinitialized context.");
503503
context.patch(newEnv);
@@ -989,7 +989,7 @@ public static Source newSource(PythonContext ctxt, TruffleFile src, String name)
989989
}
990990

991991
private static Source newSource(PythonContext context, SourceBuilder srcBuilder) throws IOException {
992-
if (getPythonOS() == PLATFORM_WIN32 && ImageInfo.inImageBuildtimeCode()) {
992+
if (getPythonOS() == PLATFORM_WIN32 && context.getEnv().isPreInitialization()) {
993993
// canonicalization on windows means something else than on linux and causes issues
994994
// with paths
995995
srcBuilder.canonicalizePath(false);
@@ -1218,7 +1218,7 @@ protected void exitContext(PythonContext context, ExitMode exitMode, int exitCod
12181218
if (context.getCApiContext() != null) {
12191219
context.getCApiContext().exitCApiContext();
12201220
}
1221-
if (!PythonImageBuildOptions.WITHOUT_PLATFORM_ACCESS && !ImageInfo.inImageBuildtimeCode()) {
1221+
if (!PythonImageBuildOptions.WITHOUT_PLATFORM_ACCESS && !context.getEnv().isPreInitialization()) {
12221222
// Reset signal handlers back to what they were
12231223
PythonModule signalModule = context.lookupBuiltinModule(T__SIGNAL);
12241224
if (signalModule != null) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -393,8 +393,10 @@
393393
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
394394
import com.oracle.truffle.api.RootCallTarget;
395395
import com.oracle.truffle.api.TruffleFile;
396+
import com.oracle.truffle.api.TruffleLanguage;
396397
import com.oracle.truffle.api.TruffleLanguage.Env;
397398
import com.oracle.truffle.api.TruffleLogger;
399+
import com.oracle.truffle.api.TruffleOptions;
398400
import com.oracle.truffle.api.nodes.Node;
399401
import com.oracle.truffle.api.object.Shape;
400402
import com.oracle.truffle.api.source.Source;
@@ -470,7 +472,7 @@ private static void filterBuiltins(List<PythonBuiltins> builtins) {
470472
builtins.removeAll(toRemove);
471473
}
472474

473-
private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed, boolean socketIOAllowed) {
475+
private static PythonBuiltins[] initializeBuiltins(TruffleLanguage.Env env) {
474476
List<PythonBuiltins> builtins = new ArrayList<>(Arrays.asList(new BuiltinConstructors(),
475477
new AbcModuleBuiltins(),
476478
new BuiltinFunctions(),
@@ -647,9 +649,9 @@ private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed,
647649
new JSONModuleBuiltins(),
648650
new SREModuleBuiltins(),
649651
new AstModuleBuiltins(),
650-
PythonImageBuildOptions.WITHOUT_NATIVE_POSIX && (PythonImageBuildOptions.WITHOUT_JAVA_INET || !socketIOAllowed) ? null : new SelectModuleBuiltins(),
651-
PythonImageBuildOptions.WITHOUT_NATIVE_POSIX && (PythonImageBuildOptions.WITHOUT_JAVA_INET || !socketIOAllowed) ? null : new SocketModuleBuiltins(),
652-
PythonImageBuildOptions.WITHOUT_NATIVE_POSIX && (PythonImageBuildOptions.WITHOUT_JAVA_INET || !socketIOAllowed) ? null : new SocketBuiltins(),
652+
PythonImageBuildOptions.WITHOUT_NATIVE_POSIX && (PythonImageBuildOptions.WITHOUT_JAVA_INET || !env.isSocketIOAllowed()) ? null : new SelectModuleBuiltins(),
653+
PythonImageBuildOptions.WITHOUT_NATIVE_POSIX && (PythonImageBuildOptions.WITHOUT_JAVA_INET || !env.isSocketIOAllowed()) ? null : new SocketModuleBuiltins(),
654+
PythonImageBuildOptions.WITHOUT_NATIVE_POSIX && (PythonImageBuildOptions.WITHOUT_JAVA_INET || !env.isSocketIOAllowed()) ? null : new SocketBuiltins(),
653655
PythonImageBuildOptions.WITHOUT_PLATFORM_ACCESS ? null : new SignalModuleBuiltins(),
654656
new TracebackBuiltins(),
655657
new GcModuleBuiltins(),
@@ -803,7 +805,7 @@ private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed,
803805
builtins.add(new LsprofModuleBuiltins());
804806
builtins.add(LsprofModuleBuiltins.newProfilerBuiltins());
805807
}
806-
if (!PythonImageBuildOptions.WITHOUT_COMPRESSION_LIBRARIES && (nativeAccessAllowed || ImageInfo.inImageBuildtimeCode())) {
808+
if (!PythonImageBuildOptions.WITHOUT_COMPRESSION_LIBRARIES && (env.isNativeAccessAllowed() || env.isPreInitialization())) {
807809
builtins.add(new BZ2CompressorBuiltins());
808810
builtins.add(new BZ2DecompressorBuiltins());
809811
builtins.add(new BZ2ModuleBuiltins());
@@ -844,15 +846,15 @@ private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed,
844846

845847
private final PythonLanguage language;
846848

847-
public Python3Core(PythonLanguage language, boolean isNativeSupportAllowed, boolean socketIOAllowed) {
849+
public Python3Core(PythonLanguage language, TruffleLanguage.Env env) {
848850
this.language = language;
849-
this.builtins = initializeBuiltins(isNativeSupportAllowed, socketIOAllowed);
851+
this.builtins = initializeBuiltins(env);
850852
this.coreFiles = initializeCoreFiles();
851853
}
852854

853855
@CompilerDirectives.ValueType
854856
public static class SysModuleState {
855-
private int recursionLimit = ImageInfo.inImageCode() ? NATIVE_REC_LIM : REC_LIM;
857+
private int recursionLimit = TruffleOptions.AOT ? NATIVE_REC_LIM : REC_LIM;
856858
private int checkInterval = 100;
857859
private double switchInterval = 0.005;
858860

@@ -1040,10 +1042,10 @@ private void initializePython3Core(TruffleString coreHome) {
10401042
/**
10411043
* Run post-initialization code that needs a fully working Python environment. This will be run
10421044
* eagerly when the context is initialized on the JVM or a new context is created on SVM, but is
1043-
* omitted when the native image is generated.
1045+
* omitted when creating a pre-initialized context.
10441046
*/
1045-
public final void postInitialize() {
1046-
if (!ImageInfo.inImageBuildtimeCode() || ImageInfo.inImageRuntimeCode()) {
1047+
public final void postInitialize(Env env) {
1048+
if (!env.isPreInitialization()) {
10471049
initialized = false;
10481050

10491051
for (PythonBuiltins builtin : builtins) {
@@ -1060,9 +1062,9 @@ public final void postInitialize() {
10601062
* fallback to another _bz2 implementation (e.g. LLVM or maybe some Java lib). This
10611063
* needs to be done here and cannot be done in 'initializeBuiltins' because then we
10621064
* would never include the intrinsified _bz2 module in the native image since native
1063-
* access is never allowed during native image build time.
1065+
* access is never allowed during context pre-initialization.
10641066
*/
1065-
if (!PythonImageBuildOptions.WITHOUT_COMPRESSION_LIBRARIES && ImageInfo.inImageCode() && !getContext().isNativeAccessAllowed()) {
1067+
if (!PythonImageBuildOptions.WITHOUT_COMPRESSION_LIBRARIES && TruffleOptions.AOT && !getContext().isNativeAccessAllowed()) {
10661068
removeBuiltinModule(BuiltinNames.T_BZ2);
10671069
}
10681070

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/GraalPythonModuleBuiltins.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,6 @@
8383
import java.util.List;
8484
import java.util.logging.Level;
8585

86-
import org.graalvm.nativeimage.ImageInfo;
87-
8886
import com.oracle.graal.python.PythonLanguage;
8987
import com.oracle.graal.python.annotations.ArgumentClinic;
9088
import com.oracle.graal.python.builtins.Builtin;
@@ -179,6 +177,7 @@
179177
import com.oracle.truffle.api.TruffleFile;
180178
import com.oracle.truffle.api.TruffleLanguage.Env;
181179
import com.oracle.truffle.api.TruffleLogger;
180+
import com.oracle.truffle.api.TruffleOptions;
182181
import com.oracle.truffle.api.dsl.Bind;
183182
import com.oracle.truffle.api.dsl.Cached;
184183
import com.oracle.truffle.api.dsl.Cached.Shared;
@@ -222,7 +221,7 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
222221
@Override
223222
public void initialize(Python3Core core) {
224223
super.initialize(core);
225-
addBuiltinConstant("is_native", ImageInfo.inImageCode());
224+
addBuiltinConstant("is_native", TruffleOptions.AOT);
226225
PythonContext ctx = core.getContext();
227226
TruffleString encodingOpt = ctx.getLanguage().getEngineOption(PythonOptions.StandardStreamEncoding);
228227
TruffleString standardStreamEncoding = null;
@@ -257,11 +256,10 @@ public void postInitialize(Python3Core core) {
257256
PythonContext context = core.getContext();
258257
PythonModule mod = core.lookupBuiltinModule(T___GRAALPYTHON__);
259258
PythonLanguage language = context.getLanguage();
260-
if (!ImageInfo.inImageBuildtimeCode()) {
259+
if (!context.getEnv().isPreInitialization()) {
261260
mod.setAttribute(tsLiteral("home"), context.getLanguageHome());
262261
}
263-
mod.setAttribute(tsLiteral("in_image_buildtime"), ImageInfo.inImageBuildtimeCode());
264-
mod.setAttribute(tsLiteral("in_image"), ImageInfo.inImageCode());
262+
mod.setAttribute(tsLiteral("in_preinitialization"), context.getEnv().isPreInitialization());
265263
TruffleString coreHome = context.getCoreHome();
266264
TruffleString stdlibHome = context.getStdlibHome();
267265
TruffleString capiHome = context.getCAPIHome();
@@ -324,8 +322,8 @@ PNone run() {
324322
* other paths through pymain_run_python are handled in GraalPythonMain and the path
325323
* prepending is done in PythonLanguage in those other cases
326324
*/
327-
assert !ImageInfo.inImageBuildtimeCode();
328325
PythonContext context = getContext();
326+
assert !context.getEnv().isPreInitialization();
329327
TruffleString inputFilePath = context.getOption(PythonOptions.InputFilePath);
330328
PythonModule sysModule = context.getSysModule();
331329
boolean needsMainImporter = !inputFilePath.isEmpty() && getImporter(sysModule, inputFilePath);
@@ -864,11 +862,11 @@ static Object doIt(Object value,
864862
@Bind("this") Node inliningTarget,
865863
@CachedLibrary(limit = "3") InteropLibrary lib,
866864
@Cached PRaiseNode raiseNode) {
867-
if (ImageInfo.inImageBuildtimeCode()) {
865+
if (getContext(inliningTarget).getEnv().isPreInitialization()) {
868866
CompilerDirectives.transferToInterpreterAndInvalidate();
869867
throw new UnsupportedOperationException(ErrorMessages.CANT_EXTEND_JAVA_CLASS_NOT_JVM.toJavaStringUncached());
870868
}
871-
if (ImageInfo.inImageRuntimeCode()) {
869+
if (TruffleOptions.AOT) {
872870
CompilerDirectives.transferToInterpreterAndInvalidate();
873871
throw raiseNode.raise(inliningTarget, SystemError, ErrorMessages.CANT_EXTEND_JAVA_CLASS_NOT_JVM);
874872
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/ImpModuleBuiltins.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@
6161
import java.util.List;
6262
import java.util.concurrent.locks.ReentrantLock;
6363

64-
import org.graalvm.nativeimage.ImageInfo;
65-
6664
import com.oracle.graal.python.PythonLanguage;
6765
import com.oracle.graal.python.annotations.ArgumentClinic;
6866
import com.oracle.graal.python.annotations.ArgumentClinic.ClinicConversion;
@@ -458,13 +456,13 @@ public abstract static class ExecBuiltin extends PythonBuiltinNode {
458456
@Specialization
459457
@TruffleBoundary
460458
public Object exec(PythonModule pythonModule) {
461-
final Python3Core core = getContext();
462-
if (!ImageInfo.inImageBuildtimeCode()) {
459+
final PythonContext context = getContext();
460+
if (!context.getEnv().isPreInitialization()) {
463461
final PythonBuiltins builtins = pythonModule.getBuiltins();
464462
assert builtins != null; // this is a builtin, therefore its builtins must have been
465463
// set at this point
466464
if (!builtins.isInitialized()) {
467-
doPostInit(core, builtins);
465+
doPostInit(context, builtins);
468466
builtins.setInitialized(true);
469467
}
470468
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/SSLModuleBuiltins.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@
6767
import javax.net.ssl.SSLContext;
6868
import javax.net.ssl.SSLEngine;
6969

70+
import com.oracle.graal.python.runtime.PythonContext;
7071
import org.bouncycastle.util.encoders.DecoderException;
71-
import org.graalvm.nativeimage.ImageInfo;
7272

7373
import com.oracle.graal.python.PythonLanguage;
7474
import com.oracle.graal.python.annotations.ArgumentClinic;
@@ -163,10 +163,10 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
163163
return SSLModuleBuiltinsFactory.getFactories();
164164
}
165165

166-
private static synchronized void loadDefaults() {
167-
if (ImageInfo.inImageBuildtimeCode()) {
166+
private static synchronized void loadDefaults(PythonContext pythonContext) {
167+
if (pythonContext.getEnv().isPreInitialization()) {
168168
// The values are dependent on system properties, don't bake them into the image
169-
throw new AssertionError("SSL module initialized at build time");
169+
throw new AssertionError("SSL module initialized during pre-initialization");
170170
}
171171
try {
172172
SSLContext context = SSLContext.getInstance("TLS");
@@ -218,7 +218,7 @@ private static boolean tryProtocolAvailability(SSLContext context, SSLProtocol p
218218
@Override
219219
public void postInitialize(Python3Core core) {
220220
super.postInitialize(core);
221-
loadDefaults();
221+
loadDefaults(core.getContext());
222222
PythonModule module = core.lookupBuiltinModule(T__SSL);
223223
module.setAttribute(tsLiteral("OPENSSL_VERSION_NUMBER"), 0);
224224
PTuple versionInfo = PFactory.createTuple(core.getLanguage(), new int[]{0, 0, 0, 0, 0});

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/SignalModuleBuiltins.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,6 @@
5757
import java.util.concurrent.Semaphore;
5858
import java.util.concurrent.TimeUnit;
5959

60-
import org.graalvm.nativeimage.ImageInfo;
61-
6260
import com.oracle.graal.python.PythonLanguage;
6361
import com.oracle.graal.python.annotations.ArgumentClinic;
6462
import com.oracle.graal.python.builtins.Builtin;
@@ -164,7 +162,8 @@ public void postInitialize(Python3Core core) {
164162
}
165163
}
166164

167-
if (PosixSupportLibrary.getUncached().getBackend(core.getContext().getPosixSupport()).equalsUncached(T_JAVA, TS_ENCODING)) {
165+
var context = core.getContext();
166+
if (PosixSupportLibrary.getUncached().getBackend(context.getPosixSupport()).equalsUncached(T_JAVA, TS_ENCODING)) {
168167
for (EmulatedSignal signal : EmulatedSignal.values()) {
169168
if (signalModule.getAttribute(signal.name) == PNone.NO_VALUE) {
170169
moduleData.signals.put(signal.name(), signal.number);
@@ -173,7 +172,7 @@ public void postInitialize(Python3Core core) {
173172
}
174173
}
175174

176-
core.getContext().registerAsyncAction(() -> {
175+
context.registerAsyncAction(() -> {
177176
SignalTriggerAction poll = moduleData.signalQueue.poll();
178177
if (PythonOptions.AUTOMATIC_ASYNC_ACTIONS) {
179178
try {
@@ -188,7 +187,7 @@ public void postInitialize(Python3Core core) {
188187
return poll;
189188
});
190189

191-
if (!ImageInfo.inImageBuildtimeCode() && core.getContext().getOption(PythonOptions.InstallSignalHandlers)) {
190+
if (!context.getEnv().isPreInitialization() && context.getOption(PythonOptions.InstallSignalHandlers)) {
192191
Object defaultSigintHandler = signalModule.getAttribute(T_DEFAULT_INT_HANDLER);
193192
assert defaultSigintHandler != PNone.NO_VALUE;
194193
SignalNode.signal(null, new Signal("INT").getNumber(), defaultSigintHandler, moduleData);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/SysModuleBuiltins.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,6 @@
140140
import java.util.List;
141141
import java.util.Set;
142142

143-
import org.graalvm.nativeimage.ImageInfo;
144-
145143
import com.oracle.graal.python.PythonLanguage;
146144
import com.oracle.graal.python.annotations.ArgumentClinic;
147145
import com.oracle.graal.python.annotations.ArgumentClinic.ClinicConversion;
@@ -647,7 +645,7 @@ public void postInitialize0(Python3Core core) {
647645
TruffleString stdlibHome = context.getStdlibHome();
648646
TruffleString capiHome = context.getCAPIHome();
649647

650-
if (!ImageInfo.inImageBuildtimeCode()) {
648+
if (!context.getEnv().isPreInitialization()) {
651649
TruffleString executable = context.getOption(PythonOptions.Executable);
652650
TruffleString baseExecutable = context.getOption(PythonOptions.BaseExecutable);
653651
sys.setAttribute(tsLiteral("executable"), executable);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/TimeModuleBuiltins.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@
4949
import java.util.List;
5050
import java.util.TimeZone;
5151

52-
import org.graalvm.nativeimage.ImageInfo;
53-
5452
import com.oracle.graal.python.PythonLanguage;
5553
import com.oracle.graal.python.annotations.ArgumentClinic;
5654
import com.oracle.graal.python.builtins.Builtin;
@@ -96,6 +94,7 @@
9694
import com.oracle.graal.python.runtime.object.PFactory;
9795
import com.oracle.graal.python.util.PythonUtils;
9896
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
97+
import com.oracle.truffle.api.TruffleOptions;
9998
import com.oracle.truffle.api.TruffleSafepoint;
10099
import com.oracle.truffle.api.dsl.Bind;
101100
import com.oracle.truffle.api.dsl.Cached;
@@ -476,7 +475,7 @@ abstract static class ThreadTimeNode extends PythonBuiltinNode {
476475
@Specialization
477476
@TruffleBoundary
478477
Object getProcesTime() {
479-
return !ImageInfo.inImageCode() ? (ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime()) / 1000_000_000.0 : 0;
478+
return !TruffleOptions.AOT ? (ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime()) / 1000_000_000.0 : 0;
480479
}
481480
}
482481

@@ -486,7 +485,7 @@ abstract static class ThreadTimeNsNode extends PythonBuiltinNode {
486485
@Specialization
487486
@TruffleBoundary
488487
Object getProcesNsTime() {
489-
return !ImageInfo.inImageCode() ? ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime() : 0;
488+
return !TruffleOptions.AOT ? ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime() : 0;
490489
}
491490
}
492491

0 commit comments

Comments
 (0)