Beispiel #1
0
        public void ReportReentrancy02()
        {
            var thread = new Thread(() =>
            {
                UnsafeWriter.AllowUnsafeWriterCaching = true;
                UnsafeWriterStatistics.ClearEvents();
                UnsafeWriterStatistics.ReportReentrancy = true;
                try
                {
                    using (var cookie = UnsafeWriter.NewThreadLocalWriter())
                    {
                        using (var nestedCookie = UnsafeWriter.NewThreadLocalWriter())
                            cookie.Writer.Write(0);
                    }
                }
                finally
                {
                    UnsafeWriterStatistics.ReportReentrancy = false;
                }
            });

            thread.Start();
            thread.Join();
            var reentrancyEvent = UnsafeWriterStatistics.GetEvents().First(@event => @event.Type == UnsafeWriterStatistics.EventType.REENTRANCY);

            Assert.IsTrue(reentrancyEvent.Stacktraces.Count == 2, "reentrancyEvent.Stacktraces.Count == 2");
        }
Beispiel #2
0
        public void TestReportAccessCounter()
        {
            var thread = new Thread(() =>
            {
                UnsafeWriterStatistics.ClearEvents();
                for (int i = 0; i < UnsafeWriterStatistics.ReportAccessCounterThreshold + UnsafeWriterStatistics.ReportOnOfN; ++i)
                {
                    using (var cookie = UnsafeWriter.NewThreadLocalWriter())
                    {
                    }
                }
            });

            thread.Start();
            thread.Join();
            var accessCounterEvent = UnsafeWriterStatistics.GetEvents().First(@event => @event.Type == UnsafeWriterStatistics.EventType.ACCESS_COUNTER);
        }
Beispiel #3
0
        public void ReportAllocationOnNonCachedThread()
        {
            var thread = new Thread(() =>
            {
                UnsafeWriterStatistics.ClearEvents();
                using (var cookie = UnsafeWriter.NewThreadLocalWriter())
                {
                    for (int i = 0; i < UnsafeWriterStatistics.ReportAllocationOnNonCachedThreadThreshold + 1; ++i)
                    {
                        cookie.Writer.Write(0);
                    }
                }
            });

            thread.Start();
            thread.Join();
            var memoryAllocationEvent = UnsafeWriterStatistics.GetEvents().First(@event => @event.Type == UnsafeWriterStatistics.EventType.MEMORY_ALLOCATION);
        }
Beispiel #4
0
        public void ReportReentrancy01()
        {
            var thread = new Thread(() =>
            {
                UnsafeWriter.AllowUnsafeWriterCaching = true;
                UnsafeWriterStatistics.ClearEvents();
                using (var cookie = UnsafeWriter.NewThreadLocalWriter())
                {
                    using (var nestedCookie = UnsafeWriter.NewThreadLocalWriter())
                        cookie.Writer.Write(0);
                }
            });

            thread.Start();
            thread.Join();
            var reentrancyEvent = UnsafeWriterStatistics.GetEvents().FirstOrDefault(@event => @event.Type == UnsafeWriterStatistics.EventType.REENTRANCY);

            Assert.IsNull(reentrancyEvent);
        }