diff --git a/agrona/src/main/java/org/agrona/concurrent/SigInt.java b/agrona/src/main/java/org/agrona/concurrent/SigInt.java index 238092970..02234f392 100644 --- a/agrona/src/main/java/org/agrona/concurrent/SigInt.java +++ b/agrona/src/main/java/org/agrona/concurrent/SigInt.java @@ -17,7 +17,6 @@ import org.agrona.LangUtil; import sun.misc.Signal; -import sun.misc.SignalHandler; import java.util.Objects; @@ -40,11 +39,8 @@ static void register(final String signalName, final Runnable task) { Objects.requireNonNull(task); - final Signal namedSignal = new Signal(signalName); - final SignalHandler previousHandler = Signal.handle(namedSignal, (signal) -> {}); - Signal.handle( - namedSignal, + new Signal(signalName), (signal) -> { Throwable error = null; @@ -57,25 +53,6 @@ static void register(final String signalName, final Runnable task) error = t; } - if (null != previousHandler) - { - try - { - previousHandler.handle(signal); - } - catch (final Throwable t) - { - if (null != error) - { - error.addSuppressed(t); - } - else - { - error = t; - } - } - } - LangUtil.rethrowUnchecked(error); }); } diff --git a/agrona/src/test/java/org/agrona/concurrent/SigIntTest.java b/agrona/src/test/java/org/agrona/concurrent/SigIntTest.java index f0fe78994..d76cf6017 100644 --- a/agrona/src/test/java/org/agrona/concurrent/SigIntTest.java +++ b/agrona/src/test/java/org/agrona/concurrent/SigIntTest.java @@ -25,7 +25,7 @@ import java.util.concurrent.CountDownLatch; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertThrowsExactly; import static org.mockito.Mockito.*; class SigIntTest @@ -38,7 +38,7 @@ void throwsNullPointerExceptionIfRunnableIsNull() @ParameterizedTest @ValueSource(strings = { "INT", "TERM" }) - void shouldInstallHandlerThatWillDelegateToTheExistingHandler(final String name) throws InterruptedException + void shouldReplaceExistingSignalHandler(final String name) throws InterruptedException { final Thread.UncaughtExceptionHandler defaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler(); @@ -55,9 +55,8 @@ void shouldInstallHandlerThatWillDelegateToTheExistingHandler(final String name) return null; }).when(exceptionHandler).uncaughtException(any(), any()); Thread.setDefaultUncaughtExceptionHandler(exceptionHandler); + final SignalHandler oldHandler = mock(SignalHandler.class); - final NumberFormatException secondException = new NumberFormatException("NaN"); - doThrow(secondException).when(oldHandler).handle(signal); Signal.handle(signal, oldHandler); final Runnable newHandler = mock(Runnable.class); @@ -70,15 +69,12 @@ void shouldInstallHandlerThatWillDelegateToTheExistingHandler(final String name) executed.await(); - final InOrder inOrder = inOrder(newHandler, oldHandler, exceptionHandler); + final InOrder inOrder = inOrder(newHandler, exceptionHandler); inOrder.verify(newHandler).run(); - inOrder.verify(oldHandler).handle(signal); inOrder.verify(exceptionHandler).uncaughtException(any(), eq(firstException)); inOrder.verifyNoMoreInteractions(); - final Throwable[] suppressed = firstException.getSuppressed(); - assertEquals(1, suppressed.length); - assertSame(secondException, suppressed[0]); + verifyNoInteractions(oldHandler); } finally {