diff --git a/src/main/java/org/cobbzilla/util/system/OutOfMemoryErrorUncaughtExceptionHandler.java b/src/main/java/org/cobbzilla/util/system/OutOfMemoryErrorUncaughtExceptionHandler.java new file mode 100644 index 0000000..2f132c3 --- /dev/null +++ b/src/main/java/org/cobbzilla/util/system/OutOfMemoryErrorUncaughtExceptionHandler.java @@ -0,0 +1,29 @@ +package org.cobbzilla.util.system; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import static org.cobbzilla.util.daemon.ZillaRuntime.shortError; +import static org.cobbzilla.util.daemon.ZillaRuntime.stacktrace; + +@AllArgsConstructor @Slf4j +public class OutOfMemoryErrorUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler { + + public static final OutOfMemoryErrorUncaughtExceptionHandler EXIT_ON_OOME = new OutOfMemoryErrorUncaughtExceptionHandler(); + + private final int status; + + public OutOfMemoryErrorUncaughtExceptionHandler() { status = 2; } + + @Override public void uncaughtException(Thread t, Throwable e) { + if (e instanceof OutOfMemoryError) { + try { + log.error("!!!!! OutOfMemoryError: calling System.exit("+status+") from: " + stacktrace(t)); + } catch (Throwable ignored) {} + System.exit(status); + } else { + log.error("!!!!! Uncaught Exception: " + shortError(e)); + } + } + +}