Skip to content

Commit 24dc3b4

Browse files
committed
Properly resolve pointer to PythonThreadState
1 parent b3417f9 commit 24dc3b4

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

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

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,12 @@
8383
import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiUnaryBuiltinNode;
8484
import com.oracle.graal.python.builtins.modules.cext.PythonCextFileBuiltins.PyFile_WriteObject;
8585
import com.oracle.graal.python.builtins.objects.PNone;
86-
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.ClearCurrentExceptionNode;
8786
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.PyErrFetchNode;
8887
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.PyErrOccurredNode;
89-
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.TransformExceptionToNativeNode;
90-
import com.oracle.graal.python.builtins.objects.cext.capi.PThreadState;
88+
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.NativeToPythonNode;
9189
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.PythonToNativeNewRefNode;
90+
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.ClearCurrentExceptionNode;
91+
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.TransformExceptionToNativeNode;
9292
import com.oracle.graal.python.builtins.objects.cext.common.NativePointer;
9393
import com.oracle.graal.python.builtins.objects.cext.structs.CStructAccess;
9494
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes.HashingStorageGetItem;
@@ -126,6 +126,7 @@
126126
import com.oracle.graal.python.runtime.exception.PythonErrorType;
127127
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
128128
import com.oracle.truffle.api.CompilerAsserts;
129+
import com.oracle.truffle.api.CompilerDirectives;
129130
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
130131
import com.oracle.truffle.api.dsl.Bind;
131132
import com.oracle.truffle.api.dsl.Cached;
@@ -239,11 +240,17 @@ private static void doNoException(Object pType, Object pValue, Object pTraceback
239240
@CApiBuiltin(ret = PyObjectBorrowed, args = {PyThreadState}, call = Ignored)
240241
abstract static class _PyTruffleErr_Occurred extends CApiUnaryBuiltinNode {
241242
@Specialization
242-
Object run(PThreadState state,
243+
Object run(Object threadStatePtr,
243244
@Bind("this") Node inliningTarget,
245+
@Cached NativeToPythonNode nativePtrToPythonNode,
244246
@Cached PyErrOccurredNode pyErrOccurredNode) {
245-
Object excType = pyErrOccurredNode.execute(inliningTarget, state.getThreadState());
246-
return excType != null ? excType : getNativeNull();
247+
Object resolved = nativePtrToPythonNode.execute(threadStatePtr);
248+
if (resolved instanceof PythonThreadState pythonThreadState) {
249+
Object excType = pyErrOccurredNode.execute(inliningTarget, pythonThreadState);
250+
return excType != null ? excType : getNativeNull();
251+
}
252+
CompilerDirectives.transferToInterpreterAndInvalidate();
253+
throw CompilerDirectives.shouldNotReachHere(String.format("invalid PyThreadState pointer %s (resolved to: %s)", threadStatePtr, resolved));
247254
}
248255
}
249256

0 commit comments

Comments
 (0)