-
Notifications
You must be signed in to change notification settings - Fork 756
Closed
Description
Here's a couple of concurrent stack traces I caught during today's debugging session (cleaned up a bit for readability):
Thread pool thread (lambda in AddPendingCollect
)
Debug.Assert(bool condition, string message, string detailMessage) Unknown
DebugUtil.EnsureGIL() Line 145 C#
Runtime.XIncref(System.IntPtr op) Line 599 C#
Runtime.PyObject_Type(System.IntPtr op) Line 908 C#
Runtime.Initialize(bool initSigs) Line 243 C#
PythonEngine.Initialize(System.Collections.Generic.IEnumerable<string> args,
bool setSysArgv, bool initSigs) Line 174 C#
PythonEngine.Initialize(bool setSysArgv, bool initSigs) Line 151 C#
PythonEngine.Initialize() Line 146 C#
Py.GIL() Line 624 C#
Finalizer.AddPendingCollect.AnonymousMethod__37_0() Line 147 C#
System.Threading.ExecutionContext.RunInternal(
System.Threading.ExecutionContext executionContext,
System.Threading.ContextCallback callback,
object state) Unknown
System.Threading.Tasks.Task.ExecuteWithThreadLocal(ref Task currentTaskSlot) Unknown
System.Threading.ThreadPoolWorkQueue.Dispatch() Unknown
Main Thread
System.Threading.Tasks.Task.Wait() Unknown
[Waiting on Async Operation]
Finalizer.Collect(bool forceDispose) Line 84 C#
Finalizer.Shutdown() Line 130 C#
Runtime.Shutdown() Line 410 C#
PythonEngine.ExecuteShutdownHandlers() Line 385 C#
PythonEngine.Shutdown() Line 317 C#
TestCustomMarshal.Dispose() Line 18 C#
It looks like when an object is collected while Python engine is shutting down, Finalizer
might force-restart Python runtime, causing it to be initialized on a different thread (in this case - a thread pool thread).
This is from my branch, but I did not make any changes to disposal/finalization I will try to reproduce it in master. Do not feel familiar enough with shutdown and finalizer machinery to investigate. @amos402 , would you take a look?
Metadata
Metadata
Assignees
Labels
No labels