コード例 #1
0
        public void Add_A_Blocking_Object_Only_Once()
        {
            // arrange
            var dumpThread     = new DumpThread();
            var blockingObject = new DumpBlockingObject();

            // act
            dumpThread.AddBlockingObject(blockingObject);
            dumpThread.AddBlockingObject(blockingObject);

            // assert
            dumpThread.BlockingObjects.Should().HaveCount(1);
        }
コード例 #2
0
        public void Exhibit_Entity_Equality()
        {
            // arrange
            var a = new DumpBlockingObject()
            {
                Address = 0
            };
            var b = new DumpBlockingObject()
            {
                Address = 0
            };
            var c = new DumpBlockingObject()
            {
                Address = 1
            };

            // act
            // assert
            a.GetHashCode().Should().Be(b.GetHashCode());
            a.GetHashCode().Should().NotBe(c.GetHashCode());

            a.Equals(a).Should().BeTrue();
            a.Equals(b).Should().BeTrue();
            a.Equals(c).Should().BeFalse();
            a.Equals(null).Should().BeFalse();
            a.Equals("").Should().BeFalse();
            a.CompareTo(a).Should().Be(0);
            a.CompareTo(b).Should().Be(0);
            a.CompareTo(c).Should().Be(-1);
            a.CompareTo(null).Should().Be(1);
            a.Equals((object)a).Should().BeTrue();
            a.Equals((object)b).Should().BeTrue();
            a.Equals((object)c).Should().BeFalse();
            a.Equals((object)null).Should().BeFalse();
            a.CompareTo((object)a).Should().Be(0);
            a.CompareTo((object)b).Should().Be(0);
            a.CompareTo((object)c).Should().Be(-1);
            a.CompareTo((object)null).Should().Be(1);
            (a < b).Should().BeFalse();
            (a <= b).Should().BeTrue();
            (c > a).Should().BeTrue();
            (c >= a).Should().BeTrue();
            Action throws = () => a.CompareTo("");

            throws.Should().Throw <ArgumentException>();
        }
コード例 #3
0
        /// <summary>
        ///     Creates the blocking objects.
        /// </summary>
        public void CreateBlockingObjects()
        {
            BlockingObjects = new Dictionary <ulong, DumpBlockingObject>();
            BlockingObjectToThreadMapping = new Dictionary <ulong, IList <uint> >();
            foreach (var blockingObject in Runtime.Heap.EnumerateBlockingObjects())
            {
                var dumpBlockingObject = new DumpBlockingObject
                {
                    Address        = blockingObject.Object,
                    BlockingReason = blockingObject.Reason,
                    IsLocked       = blockingObject.Taken,
                    RecursionCount = blockingObject.RecursionCount
                };

                if (!BlockingObjects.ContainsKey(dumpBlockingObject.Address))
                {
                    BlockingObjects.Add(dumpBlockingObject.Address, dumpBlockingObject);
                }

                if (BlockingObjectToThreadMapping.ContainsKey(blockingObject.Object))
                {
                    continue;
                }
                var owners = new List <uint>();
                if (blockingObject.Owner != null)
                {
                    owners.Add(blockingObject.Owner.OSThreadId);
                }

                if (blockingObject.Owners != null)
                {
                    owners.AddRange(blockingObject.Owners.Where(x => x != null).Select(x => x.OSThreadId));
                }

                BlockingObjectToThreadMapping.Add(blockingObject.Object, owners);
            }
        }