Skip to content

Commit

Permalink
Simplify PosixSignalRegistration implementation on Unix (#55552)
Browse files Browse the repository at this point in the history
* Simplify PosixSignalRegistration implementation on Unix

Bring it onto the same scheme as the Windows implementation.

* Address PR feedback

* Delete more dead code

* Update PosixSignalRegistration.Unix.cs
  • Loading branch information
stephentoub authored Jul 13, 2021
1 parent ca85119 commit 4f9deeb
Show file tree
Hide file tree
Showing 7 changed files with 152 additions and 268 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ internal static partial class Sys
internal static extern void DisablePosixSignalHandling(int signal);

[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_HandleNonCanceledPosixSignal")]
internal static extern bool HandleNonCanceledPosixSignal(int signal, int handlersDisposed);
internal static extern void HandleNonCanceledPosixSignal(int signal);

[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetPlatformSignalNumber")]
[SuppressGCTransition]
Expand Down
10 changes: 2 additions & 8 deletions src/libraries/Native/Unix/System.Native/pal_signal.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ static void SignalHandler(int sig, siginfo_t* siginfo, void* context)
}
}

int32_t SystemNative_HandleNonCanceledPosixSignal(int32_t signalCode, int32_t handlersDisposed)
void SystemNative_HandleNonCanceledPosixSignal(int32_t signalCode)
{
switch (signalCode)
{
Expand Down Expand Up @@ -276,11 +276,6 @@ int32_t SystemNative_HandleNonCanceledPosixSignal(int32_t signalCode, int32_t ha
// Original handler doesn't do anything.
break;
}
if (handlersDisposed && g_hasPosixSignalRegistrations[signalCode - 1])
{
// New handlers got registered.
return 0;
}
// Restore and invoke the original handler.
pthread_mutex_lock(&lock);
{
Expand All @@ -293,7 +288,6 @@ int32_t SystemNative_HandleNonCanceledPosixSignal(int32_t signalCode, int32_t ha
kill(getpid(), signalCode);
break;
}
return 1;
}

// Entrypoint for the thread that handles signals where our handling
Expand Down Expand Up @@ -385,7 +379,7 @@ static void* SignalHandlerLoop(void* arg)

if (!usePosixSignalHandler)
{
SystemNative_HandleNonCanceledPosixSignal(signalCode, 0);
SystemNative_HandleNonCanceledPosixSignal(signalCode);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/libraries/Native/Unix/System.Native/pal_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ PALEXPORT void SystemNative_DisablePosixSignalHandling(int signalCode);
/**
* Performs the default runtime action for a non-canceled PosixSignal.
*/
PALEXPORT int32_t SystemNative_HandleNonCanceledPosixSignal(int32_t signalCode, int32_t handlersDisposed);
PALEXPORT void SystemNative_HandleNonCanceledPosixSignal(int32_t signalCode);

typedef void (*ConsoleSigTtouHandler)(void);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,9 @@ public sealed partial class PosixSignalRegistration
private PosixSignalRegistration() { }

[DynamicDependency("#ctor")] // Prevent the private ctor and the IDisposable implementation from getting linked away
public static partial PosixSignalRegistration Create(PosixSignal signal, Action<PosixSignalContext> handler)
{
if (handler is null)
{
throw new ArgumentNullException(nameof(handler));
}

private static PosixSignalRegistration Register(PosixSignal signal, Action<PosixSignalContext> handler) =>
throw new PlatformNotSupportedException();
}

public partial void Dispose() { }
private void Unregister() { }
}
}
Loading

0 comments on commit 4f9deeb

Please sign in to comment.