Skip to content

Commit

Permalink
Fix MaxWorkingSet_GetNotStarted_ThrowsInvalidOperationException
Browse files Browse the repository at this point in the history
Fixes issue #105422

On MacOS, FreeBSD, SunOS (the ports that share ProcessBSD.c)
the get/set WorkingSet methods only work on the current process.
Skip the parts of tests that operate on other processes.

Remove now redundant MacOS-speicifc tests.
  • Loading branch information
gwr committed Aug 21, 2024
1 parent 0a962fc commit f72eec3
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ private static IntPtr ProcessorAffinityCore
/// </summary>
private void GetWorkingSetLimits(out IntPtr minWorkingSet, out IntPtr maxWorkingSet)
{
EnsureState(State.HaveNonExitedId);

// We can only do this for the current process on OS X
if (_processId != Environment.ProcessId)
throw new PlatformNotSupportedException(SR.OsxExternalProcessWorkingSetNotSupported);
Expand Down Expand Up @@ -86,6 +88,8 @@ private void GetWorkingSetLimits(out IntPtr minWorkingSet, out IntPtr maxWorking
/// <param name="resultingMax">The resulting maximum working set limit after any changes applied.</param>
private void SetWorkingSetLimitsCore(IntPtr? newMin, IntPtr? newMax, out IntPtr resultingMin, out IntPtr resultingMax)
{
EnsureState(State.HaveNonExitedId);

// We can only do this for the current process on OS X
if (_processId != Environment.ProcessId)
throw new PlatformNotSupportedException(SR.OsxExternalProcessWorkingSetNotSupported);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,7 @@ private void GetWorkingSetLimits(out IntPtr minWorkingSet, out IntPtr maxWorking
#pragma warning disable IDE0060
private static void SetWorkingSetLimitsCore(IntPtr? newMin, IntPtr? newMax, out IntPtr resultingMin, out IntPtr resultingMax)
{
EnsureState(State.HaveNonExitedId);

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime-dev-innerloop (Build linux-x64 debug Libraries_AllConfigurations)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux-arm64 Debug AllSubsets_Mono)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux-x64 Debug AllSubsets_Mono)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux-riscv64 Release AllSubsets_Mono)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux-arm Debug AllSubsets_Mono)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build android-arm Release AllSubsets_Mono)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux_musl-x64 Release AllSubsets_Mono)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build android-arm64 Release AllSubsets_Mono)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux-x64 Debug Mono_Interpreter_LibrariesTests)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux-x64 Debug Mono_MiniJIT_LibrariesTests)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux-arm64 Release AllSubsets_Mono_LLVMAOT)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux-arm64 Debug Mono_MiniJIT_LibrariesTests)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux-x64 Release AllSubsets_Mono_LLVMAOT)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux-arm64 Release NativeAOT_Libraries)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux_musl-arm Debug AllSubsets_CoreCLR_ReleaseRuntimeLibs)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux-arm Debug AllSubsets_CoreCLR_ReleaseRuntimeLibs)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux_musl-x64 Debug AllSubsets_CoreCLR)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux_musl-arm64 Debug AllSubsets_CoreCLR_ReleaseRuntimeLibs)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux_musl-x64 Debug CoreCLR_Libraries)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux-arm64 Debug AllSubsets_CoreCLR)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux-arm64 Debug Libraries_CheckedCoreCLR)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime (Build linux-x64 Debug CoreCLR_Libraries)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / dotnet-linker-tests (Build linux-x64 release Runtime_Release)

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / runtime-dev-innerloop

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'

Check failure on line 251 in src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs

View check run for this annotation

Azure Pipelines / dotnet-linker-tests

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs#L251

src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Linux.cs(251,13): error CS0120: (NETCORE_ENGINEERING_TELEMETRY=Build) An object reference is required for the non-static field, method, or property 'Process.EnsureState(Process.State)'
// RLIMIT_RSS with setrlimit not supported on Linux > 2.4.30.
throw new PlatformNotSupportedException(SR.MinimumWorkingSetNotSupported);
}
Expand Down
22 changes: 3 additions & 19 deletions src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -603,20 +603,12 @@ public void TestMaxWorkingSet()
}

[Fact]
[SkipOnPlatform(TestPlatforms.OSX | TestPlatforms.FreeBSD | TestPlatforms.iOS | TestPlatforms.MacCatalyst | TestPlatforms.tvOS, "Getting MaxWorkingSet is not supported on OSX, BSD, iOS, MacCatalyst, and tvOS.")]
[SkipOnPlatform(TestPlatforms.iOS | TestPlatforms.MacCatalyst | TestPlatforms.tvOS, "Getting MaxWorkingSet is not supported on iOS, MacCatalyst, and tvOS.")]
public void MaxWorkingSet_GetNotStarted_ThrowsInvalidOperationException()
{
var process = new Process();
Assert.Throws<InvalidOperationException>(() => process.MaxWorkingSet);
}

[Fact]
[PlatformSpecific(TestPlatforms.OSX | TestPlatforms.FreeBSD)]
public void MaxValueWorkingSet_GetSetMacos_ThrowsPlatformSupportedException()
{
var process = new Process();
Assert.Throws<PlatformNotSupportedException>(() => process.MaxWorkingSet);
Assert.Throws<PlatformNotSupportedException>(() => process.MaxWorkingSet = (IntPtr)1);
Assert.Throws<InvalidOperationException>(() => process.MaxWorkingSet = (IntPtr)1);
}

[ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))]
Expand Down Expand Up @@ -659,21 +651,13 @@ public void TestMinWorkingSet()
}

[Fact]
[SkipOnPlatform(TestPlatforms.OSX | TestPlatforms.FreeBSD | TestPlatforms.iOS | TestPlatforms.MacCatalyst | TestPlatforms.tvOS, "Getting MinWorkingSet is not supported on OSX, BSD, iOS, MacCatalyst, and tvOS.")]
[SkipOnPlatform(TestPlatforms.iOS | TestPlatforms.MacCatalyst | TestPlatforms.tvOS, "Getting MinWorkingSet is not supported on iOS, MacCatalyst, and tvOS.")]
public void MinWorkingSet_GetNotStarted_ThrowsInvalidOperationException()
{
var process = new Process();
Assert.Throws<InvalidOperationException>(() => process.MinWorkingSet);
}

[Fact]
[PlatformSpecific(TestPlatforms.OSX | TestPlatforms.FreeBSD)]
public void MinWorkingSet_GetMacos_ThrowsPlatformSupportedException()
{
var process = new Process();
Assert.Throws<PlatformNotSupportedException>(() => process.MinWorkingSet);
}

[Fact]
public void TestModules()
{
Expand Down

0 comments on commit f72eec3

Please sign in to comment.