From 55ce51c930b1263da4d29deff99bb3d240c2ce09 Mon Sep 17 00:00:00 2001 From: qingbozhang Date: Thu, 2 May 2024 15:59:43 +0800 Subject: [PATCH] fix: Double-checked locking for logConstructor --- .../java/org/apache/ibatis/logging/LogFactory.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/apache/ibatis/logging/LogFactory.java b/src/main/java/org/apache/ibatis/logging/LogFactory.java index f70412b3459..314cfeaac2e 100644 --- a/src/main/java/org/apache/ibatis/logging/LogFactory.java +++ b/src/main/java/org/apache/ibatis/logging/LogFactory.java @@ -30,7 +30,7 @@ public final class LogFactory { public static final String MARKER = "MYBATIS"; private static final ReentrantLock lock = new ReentrantLock(); - private static Constructor logConstructor; + private static volatile Constructor logConstructor; static { tryImplementation(LogFactory::useSlf4jLogging); @@ -95,10 +95,14 @@ public static void useNoLogging() { private static void tryImplementation(Runnable runnable) { if (logConstructor == null) { - try { - runnable.run(); - } catch (Throwable t) { - // ignore + synchronized (LogFactory.class) { + if (logConstructor == null) { + try { + runnable.run(); + } catch (Throwable t) { + // ignore + } + } } } }