Skip to content

Commit f3face0

Browse files
committed
Use PyThreadState_GetUnchecked on Python 3.13
1 parent 5a7b5be commit f3face0

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

src/runtime/Runtime.Delegates.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,14 @@ static Delegates()
2525
PyThreadState_Get = (delegate* unmanaged[Cdecl]<PyThreadState*>)GetFunctionByName(nameof(PyThreadState_Get), GetUnmanagedDll(_PythonDll));
2626
try
2727
{
28-
_PyThreadState_UncheckedGet = (delegate* unmanaged[Cdecl]<PyThreadState*>)GetFunctionByName(nameof(_PyThreadState_UncheckedGet), GetUnmanagedDll(_PythonDll));
28+
// Up until Python 3.13, this function was private and named
29+
// slightly differently.
30+
PyThreadState_GetUnchecked = (delegate* unmanaged[Cdecl]<PyThreadState*>)GetFunctionByName("_PyThreadState_UncheckedGet", GetUnmanagedDll(_PythonDll));
2931
}
3032
catch (MissingMethodException)
3133
{
32-
// Not supported in Python 3.13 anymore
34+
35+
PyThreadState_GetUnchecked = (delegate* unmanaged[Cdecl]<PyThreadState*>)GetFunctionByName(nameof(PyThreadState_GetUnchecked), GetUnmanagedDll(_PythonDll));
3336
}
3437
try
3538
{
@@ -320,7 +323,7 @@ static Delegates()
320323
internal static delegate* unmanaged[Cdecl]<PyThreadState*, void> Py_EndInterpreter { get; }
321324
internal static delegate* unmanaged[Cdecl]<PyInterpreterState*, PyThreadState*> PyThreadState_New { get; }
322325
internal static delegate* unmanaged[Cdecl]<PyThreadState*> PyThreadState_Get { get; }
323-
internal static delegate* unmanaged[Cdecl]<PyThreadState*> _PyThreadState_UncheckedGet { get; }
326+
internal static delegate* unmanaged[Cdecl]<PyThreadState*> PyThreadState_GetUnchecked { get; }
324327
internal static delegate* unmanaged[Cdecl]<int> PyGILState_Check { get; }
325328
internal static delegate* unmanaged[Cdecl]<PyGILState> PyGILState_Ensure { get; }
326329
internal static delegate* unmanaged[Cdecl]<PyGILState, void> PyGILState_Release { get; }

src/runtime/Runtime.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ internal static void Shutdown()
316316
// Then release the GIL for good, if there is somehting to release
317317
// Use the unchecked version as the checked version calls `abort()`
318318
// if the current state is NULL.
319-
if (_PyThreadState_UncheckedGet() != (PyThreadState*)0)
319+
if (PyThreadState_GetUnchecked() != (PyThreadState*)0)
320320
{
321321
PyEval_SaveThread();
322322
}
@@ -705,7 +705,7 @@ internal static T TryUsingDll<T>(Func<T> op)
705705
internal static PyThreadState* PyThreadState_Get() => Delegates.PyThreadState_Get();
706706

707707

708-
internal static PyThreadState* _PyThreadState_UncheckedGet() => Delegates._PyThreadState_UncheckedGet();
708+
internal static PyThreadState* PyThreadState_GetUnchecked() => Delegates.PyThreadState_GetUnchecked();
709709

710710

711711
internal static int PyGILState_Check() => Delegates.PyGILState_Check();

0 commit comments

Comments
 (0)