diff --git a/.github/workflows/early-access.yaml b/.github/workflows/early-access.yaml index f92aa35c..e8df8b51 100644 --- a/.github/workflows/early-access.yaml +++ b/.github/workflows/early-access.yaml @@ -34,7 +34,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-18.04, macOS-10.15, windows-2019 ] + os: [ ubuntu-22.04, macOS-10.15, windows-2019 ] runs-on: ${{ matrix.os }} steps: diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/daemon/Server.java b/daemon/src/main/java/org/mvndaemon/mvnd/daemon/Server.java index f416b5de..a10502f0 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/daemon/Server.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/daemon/Server.java @@ -239,7 +239,16 @@ public class Server implements AutoCloseable, Runnable { try { while (true) { try (SocketChannel socket = this.socket.accept()) { - client(socket); + try { + // execute the client connection handling inside a new thread to guard against possible + // ThreadLocal memory leaks + // see https://github.com/apache/maven-mvnd/issues/798 for more details + Thread handler = new Thread(() -> client(socket)); + handler.start(); + handler.join(); + } catch (Throwable t) { + LOGGER.error("Error handling a client connection", t); + } } } } catch (Throwable t) { @@ -270,7 +279,7 @@ public class Server implements AutoCloseable, Runnable { updateState(DaemonState.Idle); return; } - LOGGER.info("Request received: " + message); + LOGGER.info("Request received: {}", message); if (message instanceof BuildRequest) { handle(connection, (BuildRequest) message); }