The latest version of the Lucee warmup calls System.exit() from inside of the server start method (which is synchronized) which fires the shutdown hook, running the server stop method in another thread (which is also synchronized). This causes a deadlock as both threads are waiting on each other.
I've spent some time researching the issue, but haven't settled on the best solution yet.
For now I’ve unsynchronized a couple methods so they won’t deadlock. I can’t find a scenario in which they would overlap in a bad way. I’ve also added a couple extra null checks to prevent errors on early shutdown and tweaked the logging to get rid of unnecessary error messages.