private ThreadWCTInfo HandleGetThreadWaitChainRsult(uint threadId, int Count, WAITCHAIN_NODE_INFO[] NodeInfoArray, int isCycle) { ThreadWCTInfo result = new ThreadWCTInfo(isCycle == 1, threadId); WAITCHAIN_NODE_INFO[] info = new WAITCHAIN_NODE_INFO[Count]; Array.Copy(NodeInfoArray, info, Count); result.SetInfo(info); return result; }
internal List<UnifiedBlockingObject> GetUnmanagedBlockingObjects(ThreadWCTInfo wct_threadInfo, List<UnifiedStackFrame> unmanagedStack) { List<UnifiedBlockingObject> result = null; if (wct_threadInfo?.WctBlockingObjects.Count > 0) { result = new List<UnifiedBlockingObject>(); if (wct_threadInfo.WctBlockingObjects?.Count > 0) { foreach (var blockingObj in wct_threadInfo.WctBlockingObjects) { result.Add(new UnifiedBlockingObject(blockingObj)); } } } result.AddRange(GetUnmanagedBlockingObjects(unmanagedStack)); return result; }