diff --git a/src/main/java/org/jboss/logmanager/LoggerNode.java b/src/main/java/org/jboss/logmanager/LoggerNode.java index bf694680..02fe68f9 100644 --- a/src/main/java/org/jboss/logmanager/LoggerNode.java +++ b/src/main/java/org/jboss/logmanager/LoggerNode.java @@ -377,20 +377,31 @@ boolean isLoggableLevel(int level) { } Handler[] getHandlers() { + Handler[] handlers = this.handlers; + if (handlers == null) { + synchronized (this) { + handlers = this.handlers; + if (handlers == null) { + handlers = this.handlers = safeCloneHandlers(context.getInitializer().getInitialHandlers(fullName)); + } + } + } return handlers; } Handler[] clearHandlers() { final Handler[] handlers = this.handlers; handlersUpdater.clear(this); - return handlers.length > 0 ? handlers.clone() : handlers; + return safeCloneHandlers(handlers); } void removeHandler(final Handler handler) { + getHandlers(); handlersUpdater.remove(this, handler, true); } void addHandler(final Handler handler) { + getHandlers(); handlersUpdater.add(this, handler); context.pin(this); } @@ -418,7 +429,7 @@ void setUseParentHandlers(final boolean useParentHandlers) { } void publish(final ExtLogRecord record) { - for (Handler handler : handlers) + for (Handler handler : getHandlers()) try { handler.publish(record); } catch (VirtualMachineError e) {