Skip to content

Commit

Permalink
[Java] Restore the original behavior around the signal handling by no…
Browse files Browse the repository at this point in the history
…t delegating to the previously registered handler.

This effectively reverts the pull request that was raised to address the #270, because the approach in that PR broke the existing code that was using the `ShutdownSignalBarrier`.
  • Loading branch information
vyazelenko committed Jul 11, 2023
1 parent 068298b commit e439036
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 33 deletions.
25 changes: 1 addition & 24 deletions agrona/src/main/java/org/agrona/concurrent/SigInt.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

import org.agrona.LangUtil;
import sun.misc.Signal;
import sun.misc.SignalHandler;

import java.util.Objects;

Expand All @@ -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;
Expand All @@ -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);
});
}
Expand Down
14 changes: 5 additions & 9 deletions agrona/src/test/java/org/agrona/concurrent/SigIntTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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();
Expand All @@ -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);
Expand All @@ -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
{
Expand Down

0 comments on commit e439036

Please sign in to comment.