Skip to content

Commit 59efeac

Browse files
fangerertimfel
authored andcommitted
Add special handling for StackOverflowError in checkThrowableBeforeNative
1 parent 8a8db4b commit 59efeac

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextBuiltins.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
package com.oracle.graal.python.builtins.modules.cext;
4242

4343
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.NotImplementedError;
44+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.RecursionError;
4445
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.SystemError;
4546
import static com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiCallPath.Direct;
4647
import static com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiCallPath.Ignored;
@@ -109,6 +110,7 @@
109110
import com.oracle.graal.python.builtins.objects.cext.common.CExtToJavaNode;
110111
import com.oracle.graal.python.builtins.objects.cext.common.CExtToNativeNode;
111112
import com.oracle.graal.python.builtins.objects.code.PCode;
113+
import com.oracle.graal.python.builtins.objects.exception.PBaseException;
112114
import com.oracle.graal.python.builtins.objects.frame.PFrame;
113115
import com.oracle.graal.python.builtins.objects.frame.PFrame.Reference;
114116
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
@@ -144,6 +146,7 @@
144146
import com.oracle.graal.python.runtime.PythonContext;
145147
import com.oracle.graal.python.runtime.PythonContext.GetThreadStateNode;
146148
import com.oracle.graal.python.runtime.PythonOptions;
149+
import com.oracle.graal.python.runtime.exception.ExceptionUtils;
147150
import com.oracle.graal.python.runtime.exception.PException;
148151
import com.oracle.graal.python.runtime.exception.PythonErrorType;
149152
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
@@ -249,6 +252,13 @@ public static PException checkThrowableBeforeNative(Throwable t, String where1,
249252
// ThreadDeath subclasses are used internally by Truffle
250253
throw td;
251254
}
255+
if (t instanceof StackOverflowError soe) {
256+
PythonContext context = PythonContext.get(null);
257+
context.reacquireGilAfterStackOverflow();
258+
PBaseException newException = context.factory().createBaseException(RecursionError, ErrorMessages.MAXIMUM_RECURSION_DEPTH_EXCEEDED, EMPTY_OBJECT_ARRAY);
259+
PException pe = ExceptionUtils.wrapJavaException(soe, null, newException);
260+
throw pe;
261+
}
252262
// everything else: log and convert to PException (SystemError)
253263
CompilerDirectives.transferToInterpreter();
254264
PNodeWithContext.printStack();

0 commit comments

Comments
 (0)