diff options
Diffstat (limited to 'tests/src/GC')
-rw-r--r-- | tests/src/GC/API/GCHandleCollector/Usage.cs | 13 | ||||
-rw-r--r-- | tests/src/GC/Features/HeapExpansion/pluggaps.csproj | 2 | ||||
-rw-r--r-- | tests/src/GC/Scenarios/DoublinkList/dlcollect.cs | 37 | ||||
-rw-r--r-- | tests/src/GC/Scenarios/DoublinkList/dlstack.cs | 49 | ||||
-rw-r--r-- | tests/src/GC/Scenarios/DoublinkList/doublinkgen.cs | 39 | ||||
-rw-r--r-- | tests/src/GC/Stress/Framework/ReliabilityFramework.csproj | 4 |
6 files changed, 107 insertions, 37 deletions
diff --git a/tests/src/GC/API/GCHandleCollector/Usage.cs b/tests/src/GC/API/GCHandleCollector/Usage.cs index b78271b243..f346966a6b 100644 --- a/tests/src/GC/API/GCHandleCollector/Usage.cs +++ b/tests/src/GC/API/GCHandleCollector/Usage.cs @@ -146,9 +146,16 @@ public class Usage // ensure threshold is increasing if (!CheckPercentageIncrease(handleCount, prevHandleCount)) { - // see github#4093 for the rationale for fail-fast in this test. - Environment.FailFast(string.Empty); - return false; + Console.WriteLine("Percentage not increasing, performing Collect/WFPF/Collect cycle"); + GC.Collect(); + GC.WaitForPendingFinalizers(); + GC.Collect(); + + if (handleCount == HandleCollectorTest.Count) + { + Console.WriteLine("No handles finalized in Collect/WFPF/Collect cycle"); + return false; + } } prevHandleCount = handleCount; } diff --git a/tests/src/GC/Features/HeapExpansion/pluggaps.csproj b/tests/src/GC/Features/HeapExpansion/pluggaps.csproj index 8a1f7a47e2..0250cab230 100644 --- a/tests/src/GC/Features/HeapExpansion/pluggaps.csproj +++ b/tests/src/GC/Features/HeapExpansion/pluggaps.csproj @@ -10,7 +10,7 @@ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir> <GCStressIncompatible>true</GCStressIncompatible> - <HeapVerifyIncompatible Condition="'$(Platform)' == 'x86'">true</HeapVerifyIncompatible> + <HeapVerifyIncompatible>true</HeapVerifyIncompatible> </PropertyGroup> <!-- Default configurations to help VS understand the configurations --> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> diff --git a/tests/src/GC/Scenarios/DoublinkList/dlcollect.cs b/tests/src/GC/Scenarios/DoublinkList/dlcollect.cs index a17e95a270..f7aa10dccb 100644 --- a/tests/src/GC/Scenarios/DoublinkList/dlcollect.cs +++ b/tests/src/GC/Scenarios/DoublinkList/dlcollect.cs @@ -11,6 +11,7 @@ namespace DoubLink { using System; using System.Collections.Generic; + using System.Runtime.CompilerServices; public class DLCollect { @@ -63,11 +64,38 @@ namespace DoubLink { } + [MethodImpl(MethodImplOptions.NoInlining)] + public bool DrainFinalizerQueue(int iRep, int iObj) + { + int lastValue = DLinkNode.FinalCount; + while (true) + { + GC.Collect(); + GC.WaitForPendingFinalizers(); + GC.Collect(); + + if (DLinkNode.FinalCount == iRep * iObj * 10) + { + return true; + } + + if (DLinkNode.FinalCount != lastValue) + { + Console.WriteLine(" Performing Collect/Wait/Collect cycle again"); + lastValue = DLinkNode.FinalCount; + continue; + } + + Console.WriteLine(" Finalized number stable at " + lastValue); + return false; + } + } public bool runTest(int iRep, int iObj) { Mv_Collect = new List<DoubLink>(iRep); + bool success = false; for(int i=0; i <10; i++) { SetLink(iRep, iObj); @@ -75,16 +103,13 @@ namespace DoubLink { GC.Collect(); } - GC.WaitForPendingFinalizers(); - - if (DLinkNode.FinalCount != iRep * iObj * 10) + if (DrainFinalizerQueue(iRep, iObj)) { - // see github#4093 for the rationale for fail-fast in this test. - Environment.FailFast(string.Empty); + success = true; } Console.WriteLine("{0} DLinkNodes finalized", DLinkNode.FinalCount); - return (DLinkNode.FinalCount==iRep*iObj*10); + return success; } diff --git a/tests/src/GC/Scenarios/DoublinkList/dlstack.cs b/tests/src/GC/Scenarios/DoublinkList/dlstack.cs index 5e207bec52..8fa63bf8fd 100644 --- a/tests/src/GC/Scenarios/DoublinkList/dlstack.cs +++ b/tests/src/GC/Scenarios/DoublinkList/dlstack.cs @@ -13,6 +13,7 @@ namespace DoubLink { using System; + using System.Runtime.CompilerServices; public class DLStack { @@ -63,36 +64,50 @@ namespace DoubLink { } + [MethodImpl(MethodImplOptions.NoInlining)] + public bool DrainFinalizerQueue(int iRep, int iObj) + { + int lastValue = DLinkNode.FinalCount; + while (true) + { + GC.Collect(); + GC.WaitForPendingFinalizers(); + GC.Collect(); + + if (DLinkNode.FinalCount == iRep * iObj * 10) + { + return true; + } + + if (DLinkNode.FinalCount != lastValue) + { + Console.WriteLine(" Performing Collect/Wait/Collect cycle again"); + lastValue = DLinkNode.FinalCount; + continue; + } + + Console.WriteLine(" Finalized number stable at " + lastValue); + return false; + } + } + public bool runTest(int iRep, int iObj) { - + bool success = false; for(int i=0; i <10; i++) { SetLink(iRep, iObj); MakeLeak(iRep); } - long lastTotalMemory = long.MaxValue; - long curTotalMemory = GC.GetTotalMemory(false); - - while (lastTotalMemory != curTotalMemory) - { - GC.Collect(); - GC.WaitForPendingFinalizers(); - - lastTotalMemory = curTotalMemory; - curTotalMemory = GC.GetTotalMemory(false); - } - - if (DLinkNode.FinalCount != iRep * iObj * 10) + if (DrainFinalizerQueue(iRep, iObj)) { - // see github#4093 for the rationale for fail-fast in this test. - Environment.FailFast(string.Empty); + success = true; } Console.WriteLine("{0} DLinkNodes finalized", DLinkNode.FinalCount); - return (DLinkNode.FinalCount==iRep*iObj*10); + return success; } diff --git a/tests/src/GC/Scenarios/DoublinkList/doublinkgen.cs b/tests/src/GC/Scenarios/DoublinkList/doublinkgen.cs index 76436ea7fe..0f1016c3d0 100644 --- a/tests/src/GC/Scenarios/DoublinkList/doublinkgen.cs +++ b/tests/src/GC/Scenarios/DoublinkList/doublinkgen.cs @@ -11,6 +11,7 @@ namespace DoubLink { using System; + using System.Runtime.CompilerServices; public class DoubLinkGen { @@ -61,25 +62,47 @@ namespace DoubLink { return 1; } + [MethodImpl(MethodImplOptions.NoInlining)] + public bool DrainFinalizerQueue(int iRep, int iObj) + { + int lastValue = DLinkNode.FinalCount; + while (true) + { + GC.Collect(); + GC.WaitForPendingFinalizers(); + GC.Collect(); + + if (DLinkNode.FinalCount == iRep * iObj) + { + return true; + } + + if (DLinkNode.FinalCount != lastValue) + { + Console.WriteLine(" Performing Collect/Wait/Collect cycle again"); + lastValue = DLinkNode.FinalCount; + continue; + } + + Console.WriteLine(" Finalized number stable at " + lastValue); + return false; + } + } public bool runTest(int iRep, int iObj) { SetLink(iRep, iObj); Mv_Doub = null; + bool success = false; - GC.Collect(); - GC.WaitForPendingFinalizers(); - GC.Collect(); - - if (DLinkNode.FinalCount != iRep * iObj) + if (DrainFinalizerQueue(iRep, iObj)) { - // see github#4093 for the rationale for fail-fast in this test. - Environment.FailFast(string.Empty); + success = true; } Console.Write(DLinkNode.FinalCount); Console.WriteLine(" DLinkNodes finalized"); - return (DLinkNode.FinalCount==iRep*iObj); + return success; } diff --git a/tests/src/GC/Stress/Framework/ReliabilityFramework.csproj b/tests/src/GC/Stress/Framework/ReliabilityFramework.csproj index 7b42bd1b34..91921abba7 100644 --- a/tests/src/GC/Stress/Framework/ReliabilityFramework.csproj +++ b/tests/src/GC/Stress/Framework/ReliabilityFramework.csproj @@ -10,9 +10,9 @@ <OutputType>Exe</OutputType> <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir> - <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestKind>BuildOnly</CLRTestKind> + <GenerateRunScript>false</GenerateRunScript> <CLRTestPriority>1</CLRTestPriority> - <CLRTestExecutionArguments>testmix_gc.config /maximumExecutionTime:-1</CLRTestExecutionArguments> <DefineConstants>$(DefineConstants);STATIC;PROJECTK_BUILD</DefineConstants> </PropertyGroup> <!-- Default configurations to help VS understand the configurations --> |