Skip to content

Commit 9d69124

Browse files
committed
Implement sys.is_finalizing
1 parent 2d075f8 commit 9d69124

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,7 @@ public NodeFactory getNodeFactory() {
208208

209209
@Override
210210
protected void finalizeContext(PythonContext context) {
211-
context.shutdownThreads();
212-
context.runShutdownHooks();
211+
context.finalizeContext();
213212
super.finalizeContext(context);
214213
}
215214

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import java.util.Date;
5353
import java.util.List;
5454

55+
import com.oracle.truffle.api.dsl.CachedContext;
5556
import org.graalvm.nativeimage.ImageInfo;
5657

5758
import com.oracle.graal.python.PythonLanguage;
@@ -492,4 +493,15 @@ protected LookupAndCallUnaryNode createWithoutError() {
492493
return LookupAndCallUnaryNode.create(__SIZEOF__);
493494
}
494495
}
496+
497+
@Builtin(name = "is_finalizing")
498+
@GenerateNodeFactory
499+
public abstract static class IsFinalizingNode extends PythonBuiltinNode {
500+
@Specialization
501+
static boolean doGeneric(
502+
@CachedContext(PythonLanguage.class) PythonContext context) {
503+
return context.isFinalizing();
504+
}
505+
}
506+
495507
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonContext.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107

108108
public final class PythonContext {
109109
private static final TruffleLogger LOGGER = PythonLanguage.getLogger(PythonContext.class);
110+
private volatile boolean finalizing;
110111

111112
private static final class PythonThreadState {
112113

@@ -717,7 +718,14 @@ public void deregisterShutdownHook(Object callable) {
717718
}
718719

719720
@TruffleBoundary
720-
public void runShutdownHooks() {
721+
public void finalizeContext() {
722+
finalizing = true;
723+
shutdownThreads();
724+
runShutdownHooks();
725+
}
726+
727+
@TruffleBoundary
728+
private void runShutdownHooks() {
721729
handler.shutdown();
722730
// run atExitHooks in reverse order they were registered
723731
MapCursor<Object, AtExitHook> cursor = atExitHooks.getEntries();
@@ -741,7 +749,7 @@ public void runShutdownHooks() {
741749
}
742750

743751
@TruffleBoundary
744-
public void shutdownThreads() {
752+
private void shutdownThreads() {
745753
LOGGER.fine("shutting down threads");
746754
PDict importedModules = getImportedModules();
747755
HashingStorage dictStorage = GetDictStorageNode.getUncached().execute(importedModules);
@@ -1105,4 +1113,8 @@ public void setGcEnabled(boolean flag) {
11051113
public AsyncHandler.SharedFinalizer getSharedFinalizer() {
11061114
return sharedFinalizer;
11071115
}
1116+
1117+
public boolean isFinalizing() {
1118+
return finalizing;
1119+
}
11081120
}

0 commit comments

Comments
 (0)