From 00e340cb4340442714f730cbfacd2d7c9a7db656 Mon Sep 17 00:00:00 2001 From: Prudhvi Akhil Alahari Date: Sat, 31 Oct 2020 00:14:53 +0530 Subject: [PATCH] Make start method in PluginLogFile thread safe Before this change, start method of PluginLogFile was not thread safe, thus multiple threads can create multiple log appenders to the same log file and allow duplicate log entries to be logged. This change makes start method of PluginLogFile thread safe. Change-Id: If1705b9dd74fa5482602226a7399eaee3e7c97fb --- java/com/google/gerrit/server/util/PluginLogFile.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/java/com/google/gerrit/server/util/PluginLogFile.java b/java/com/google/gerrit/server/util/PluginLogFile.java index de8b3aabb7..8235623354 100644 --- a/java/com/google/gerrit/server/util/PluginLogFile.java +++ b/java/com/google/gerrit/server/util/PluginLogFile.java @@ -40,8 +40,13 @@ public abstract class PluginLogFile implements LifecycleListener { public void start() { AsyncAppender asyncAppender = systemLog.createAsyncAppender(logName, layout, true, true); Logger logger = LogManager.getLogger(logName); - logger.removeAppender(logName); - logger.addAppender(asyncAppender); + if (logger.getAppender(logName) == null) { + synchronized (this) { + if (logger.getAppender(logName) == null) { + logger.addAppender(asyncAppender); + } + } + } logger.setAdditivity(false); }