Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,10 @@ public static IEnumerable<object[]> SignalTestData()
{
foreach (PosixSignal signal in Enum.GetValues<PosixSignal>())
{
if (signal == PosixSignal.SIGKILL)
{
continue; // SIGKILL cannot be caught or ignored
}
yield return new object[] { signal };
}
// Test a few raw signals.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ public enum PosixSignal

/// <summary>Stop typed at terminal</summary>
[UnsupportedOSPlatform("windows")]
SIGTSTP = -10
SIGTSTP = -10,

/// <summary>Kill (cannot be caught or ignored)</summary>
[UnsupportedOSPlatform("windows")]
SIGKILL = -11
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1581,6 +1581,8 @@ public OptionalAttribute() { }
}
public enum PosixSignal
{
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("windows")]
SIGKILL = -11,
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("windows")]
SIGTSTP = -10,
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("windows")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,19 @@ public partial class PosixSignalRegistrationTests
{
public static IEnumerable<object[]> UninstallableSignals()
{
yield return new object[] { PosixSignal.SIGKILL };
yield return new object[] { (PosixSignal)9 };
}

public static IEnumerable<object[]> SupportedSignals()
{
foreach (PosixSignal value in Enum.GetValues(typeof(PosixSignal)))
yield return new object[] { value };
{
if (value != PosixSignal.SIGKILL)
{
yield return new object[] { value };
}
}
}

public static IEnumerable<object[]> UnsupportedSignals()
Expand Down Expand Up @@ -252,7 +258,12 @@ public static TheoryData<PosixSignal> PosixSignalAsRawValues
var data = new TheoryData<PosixSignal>();
foreach (var value in Enum.GetValues(typeof(PosixSignal)))
{
int signo = GetPlatformSignalNumber((PosixSignal)value);
PosixSignal signal = (PosixSignal)value;
if (signal == PosixSignal.SIGKILL)
{
continue; // SIGKILL cannot be registered
}
int signo = GetPlatformSignalNumber(signal);
Assert.True(signo > 0, "Expected raw signal number to be greater than 0.");
data.Add((PosixSignal)signo);
}
Expand Down
7 changes: 7 additions & 0 deletions src/native/libs/System.Native/pal_signal.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,10 @@ static bool TryConvertSignalCodeToPosixSignal(int signalCode, PosixSignal* posix
*posixSignal = PosixSignalSIGTSTP;
return true;

case SIGKILL:
*posixSignal = PosixSignalSIGKILL;
return true;

default:
*posixSignal = (PosixSignal)signalCode;
return false;
Expand Down Expand Up @@ -169,6 +173,9 @@ int32_t SystemNative_GetPlatformSignalNumber(PosixSignal signal)
case PosixSignalSIGTSTP:
return SIGTSTP;

case PosixSignalSIGKILL:
return SIGKILL;

case PosixSignalInvalid:
break;
}
Expand Down
3 changes: 2 additions & 1 deletion src/native/libs/System.Native/pal_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ typedef enum
PosixSignalSIGWINCH = -7,
PosixSignalSIGTTIN = -8,
PosixSignalSIGTTOU = -9,
PosixSignalSIGTSTP = -10
PosixSignalSIGTSTP = -10,
PosixSignalSIGKILL = -11
} PosixSignal;

typedef int32_t (*PosixSignalHandler)(int32_t signalCode, PosixSignal signal);
Expand Down
Loading