Commits
Tarun Sukhani authored 6f903ebd9dd
fix: finish the binds on a shutdown during start, keep what Play logs while it stops (release 1.13.86) PF-188: a SIGTERM during start (play aot-gen sends one right after its first answered request) ran the server drain while Server.<init> was still binding, so the HTTPS or HTTP/3 bind landed on an event loop the drain had terminated: a RejectedExecutionException, and an AOT cache trained without HTTP/3. The drain now waits, at most Server.BIND_WAIT_MS, for the constructor to finish binding, and the constructor's fatal paths release that wait first, since Play.fatalServerErrorOccurred() exits from inside it. Guarded by ServerShutdownDuringStartTest. PF-189: where the classpath has no conf/ (a bundle, a start from the AOT cache), the log4j context the JUL bridge starts first registers log4j's own shutdown hook, which stopped the appenders while onApplicationStop still logged. Every launcher now passes -Dlog4j2.shutdownHookEnabled=false beside the JUL manager, Play.shutdownHook ends with LogManager.shutdown(), and Server.main stops log4j for a JVM that ends before Play's hook exists (precompile, a failed Play.init, DEV before its first request). Guarded by integration.ShutdownLoggingTest and the argv pins in JulBridgeArgsTest and BundleLauncherTest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>