示例#1
0
        /// <summary>
        ///     Converts the specified blocking object.
        /// </summary>
        /// <param name="blockingObject">The blocking object.</param>
        /// <returns>IBlockingObject.</returns>
        public IBlockingObject Convert(ClrMd.BlockingObject blockingObject)
        {
            if (blockingObject == null)
            {
                return(null);
            }
            var item = new BlockingObjectAdapter(this, blockingObject);

            return(Cache.GetOrAdd <IBlockingObject>(blockingObject, () => item, () => item.Setup()));
        }
 public BlockingObjectInformation(ClrDump clrDump, BlockingObject blockingObject)
 {
     ClrDump = clrDump;
     BlockingObject = blockingObject;
     
     if (blockingObject.HasSingleOwner && blockingObject.Owner != null)
     {
         OwnersId = new HashSet<int>();
         OwnersId.Add(blockingObject.Owner.ManagedThreadId);
     }
     else
     {
         OwnersId = new HashSet<int>(blockingObject.Owners.Where(thread  => thread != null).Select(thread => thread.ManagedThreadId));
     }
     if (blockingObject.Waiters != null)
     {
         WaitersId = new HashSet<int>(blockingObject.Waiters.Where(thread => thread != null).Select(thread => thread.ManagedThreadId));
     }
     else
     {
         WaitersId = new HashSet<int>();
     }
 }
示例#3
0
        public UnifiedBlockingObject(BlockingObject obj)
            : this(BlockingObjectOrigin.ClrMD)
        {
            foreach (var owner in obj.Owners?.Where(o => o != null) ?? new ClrThread[0])
            {
                OwnerOSThreadIds.Add(owner.OSThreadId);
            }
            foreach (var waiter in obj.Waiters?.Where(w => w != null) ?? new ClrThread[0])
            {
                WaiterOSThreadIds.Add(waiter.OSThreadId);
            }

            Reason = (UnifiedBlockingReason)((int)obj.Reason);
            RecursionCount = obj.RecursionCount;
            ManagedObjectAddress = obj.Object;

            Type = UnifiedBlockingType.ClrBlockingObject;
        }
示例#4
0
 internal void SetBlockingObjects(BlockingObject[] blobjs)
 {
     _blockingObjs = blobjs;
 }