Skip unstashing more aggressively · pythonnet/pythonnet@bbd8582
@@ -112,47 +112,47 @@ internal static void Stash()
112112PostStashHook?.Invoke();
113113}
114114115-internal static void RestoreRuntimeData()
115+internal static bool RestoreRuntimeData()
116116{
117117try
118118{
119-RestoreRuntimeDataImpl();
119+return RestoreRuntimeDataImpl();
120120}
121121finally
122122{
123123ClearStash();
124124}
125125}
126126127-private static void RestoreRuntimeDataImpl()
127+private static bool RestoreRuntimeDataImpl()
128128{
129129PreRestoreHook?.Invoke();
130130BorrowedReference capsule = PySys_GetObject("clr_data");
131131if (capsule.IsNull)
132132{
133-return;
133+return false;
134134}
135135IntPtr mem = PyCapsule_GetPointer(capsule, IntPtr.Zero);
136136int length = (int)Marshal.ReadIntPtr(mem);
137137byte[] data = new byte[length];
138138Marshal.Copy(mem + IntPtr.Size, data, 0, length);
139139var ms = new MemoryStream(data);
140140var formatter = CreateFormatter();
141-var storage = (PythonNetState)formatter.Deserialize(ms);
142141143-PyCLRMetaType = MetaType.RestoreRuntimeData(storage.Metatype);
142+if (formatter.Deserialize(ms) is PythonNetState storage)
143+{
144+PyCLRMetaType = MetaType.RestoreRuntimeData(storage.Metatype);
144145145-TypeManager.RestoreRuntimeData(storage.Types);
146-ClassManager.RestoreRuntimeData(storage.Classes);
146+ TypeManager.RestoreRuntimeData(storage.Types);
147+ ClassManager.RestoreRuntimeData(storage.Classes);
147148148-RestoreRuntimeDataObjects(storage.SharedObjects);
149+ RestoreRuntimeDataObjects(storage.SharedObjects);
149150150-ImportHook.RestoreRuntimeData(storage.ImportHookState);
151-}
151+ImportHook.RestoreRuntimeData(storage.ImportHookState);
152+return true;
153+}
152154153-public static bool HasStashData()
154-{
155-return !PySys_GetObject("clr_data").IsNull;
155+return false;
156156}
157157158158public static void ClearStash()