public static IEnumerable <IIssue> DetectDeadLocks(ClrRuntime runtime, Report report) { var blockedThreads = runtime.Heap .EnumerateBlockingObjects() .Where(o => o.Owner != null && o.Waiters.Count > 0) .Select(o => o.Owner); var lockCycles = Graphs .FindCycles( blockedThreads, thread => thread.BlockingObjects, obj => obj.Owner, new ClrThreadEqualityComparer()); return(lockCycles.Select(c => new DeadLockIssue(c))); }