Reflections on Privacy
by in CodeSOD on 2024-07-25Jaco's team had a problems with making an embedded web server shut down properly. Something about the shutdown process was deadlocking, so one of their "ninja Yoda coders" rockstarred their way to a solution.
private void stopServer() {
try {
if (webServer != null) {
logger.debug("Shutdown webserver");
// This goes into a dead lock, therefore I've replaced it with
// some voodoo stuff.
logger.debug("Get listener field from web server.");
Field listenerField = WebServer.class.getDeclaredField("listener");
listenerField.setAccessible(true);
Thread listener = (Thread) listenerField.get(webServer);
listenerField.set(webServer, null);
logger.debug("Interrupt the listener thread.");
listener.interrupt();
webServer = null;
logger.debug("Shutdown webserver complete");
} else {
logger.debug("No webserver to shutdown");
}
} catch (Exception e) {
logger.error(LoggerCodes.RPC_SERVER_SHUTDOWN_FAILURE, e, LoggerUtility.parameters("class",
e.getClass().getSimpleName(), "message", e.getMessage()));
}
}