Download Latest Version 2.3.2 source code.tar.gz (375.5 kB)
Email in envelope

Get an email when there's a new version of Agrona

Home / 2.3.0
Name Modified Size InfoDownloads / Week
Parent folder
2.3.0 source code.tar.gz 2025-09-29 357.6 kB
2.3.0 source code.zip 2025-09-29 641.6 kB
README.md 2025-09-29 3.0 kB
Totals: 3 Items   1.0 MB 0
  • [Breaking] Changed org.agrona.concurrent.ShutdownSignalBarrier to use shutdown hooks instead of signals.

Previously ShutdownSignalBarrier relied on intercepting SIGINT and SIGTERM OS signals by overriding JVM's signal handling which was preventing shutdown hooks from be executed. This in turn was breaking applications and frameworks that relied on shutdown hooks for clean termination.

New implementation uses shutdown hooks instead and requires ShutdownSignalBarrier to be explicitly closed.

NB: Failure to close ShutdownSignalBarrier might result in JVM not terminating!

As the result the code using ShutdownSignalBarrier needs to be updated:

  • Old:

java class UsageSample { public static void main(final String[] args) { try (MyService service = new MyService()) { new ShutdownSignalBarrier().await(); } } }

  • New: java class UsageSample { public static void main(final String[] args) { try (ShutdownSignalBarrier barrier = new ShutdownSignalBarrier(); MyService service = new MyService()) { barrier.await(); } } } In the above example ShutdownSignalBarrier is closed last to ensure that service terminates completely before ShutdownSignalBarrier closes which in turn allows JVM to exit.

  • [Breaking] Deprecated org.agrona.concurrent.SigInt for removal. Use org.agrona.concurrent.ShutdownSignalBarrier instead.

NB: org.agrona.concurrent.SigInt.register(java.lang.Runnable) is unsafe as it overrides SIGINT signal handling of the JVM thus preventing shutdown hooks from being executed.

An example using ShutdownSignalBarrier instead of SigInt:

  • Old: java class FlagSample { public static void main(final String[] args) { final AtomicBoolean running = new AtomicBoolean(false); SigInt.register(() -> running.set(false)); while(running.get()) { ... } } }
  • New: java class FlagSample { public static void main(final String[] args) { final AtomicBoolean running = new AtomicBoolean(true); try (ShutdownSignalBarrier barrier = new ShutdownSignalBarrier(() -> running.set(false)) { while (running.get()) { ... } } } }

  • AtomicCounter minor javadoc improvements. (#338)

  • Upgrade to Gradle 9.1.0.
  • Upgrade to ByteBuddy 1.17.7.
  • Upgrade to Checkstyle 11.1.0.
  • Upgrade to JUnit 5.13.4.
  • Upgrade to Mockito 5.20.0.
  • Upgrade to Shadow 9.2.2.
  • Upgrade to Versions 0.53.0.
Source: README.md, updated 2025-09-29