summaryrefslogtreecommitdiff
path: root/tests/src/GC
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/GC')
-rw-r--r--tests/src/GC/API/GCHandleCollector/Usage.cs13
-rw-r--r--tests/src/GC/Features/HeapExpansion/pluggaps.csproj2
-rw-r--r--tests/src/GC/Scenarios/DoublinkList/dlcollect.cs37
-rw-r--r--tests/src/GC/Scenarios/DoublinkList/dlstack.cs49
-rw-r--r--tests/src/GC/Scenarios/DoublinkList/doublinkgen.cs39
-rw-r--r--tests/src/GC/Stress/Framework/ReliabilityFramework.csproj4
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 -->