From 1ab173bb3536182a1eb40f49e59c44bc030d649b Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 06 Oct 2015 08:08:53 +0000
Subject: [PATCH] bugfix: dsconfig on loggers trigger thread leaks
---
opendj-server-legacy/src/main/java/org/opends/server/loggers/TextDebugLogPublisher.java | 27 ++++++++++++++++++++++-----
1 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/loggers/TextDebugLogPublisher.java b/opendj-server-legacy/src/main/java/org/opends/server/loggers/TextDebugLogPublisher.java
index 6bdb010..074413f 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/loggers/TextDebugLogPublisher.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/loggers/TextDebugLogPublisher.java
@@ -232,9 +232,19 @@
if (config.isAsynchronous())
{
- if (!(writer instanceof AsynchronousTextWriter))
+ if (writer instanceof AsynchronousTextWriter)
{
- // The asynchronous setting is being turned on.
+ if (hasAsyncConfigChanged(config))
+ {
+ // reinstantiate
+ final AsynchronousTextWriter previousWriter = (AsynchronousTextWriter) writer;
+ writer = newAsyncWriter(mfWriter, config);
+ previousWriter.shutdown(false);
+ }
+ }
+ else
+ {
+ // turn async text writer on
writer = newAsyncWriter(mfWriter, config);
}
}
@@ -242,10 +252,10 @@
{
if (writer instanceof AsynchronousTextWriter)
{
- // The asynchronous setting is being turned off.
- AsynchronousTextWriter asyncWriter = (AsynchronousTextWriter) writer;
+ // asynchronous is being turned off, remove async text writers.
+ final AsynchronousTextWriter previousWriter = (AsynchronousTextWriter) writer;
writer = mfWriter;
- asyncWriter.shutdown(false);
+ previousWriter.shutdown(false);
}
}
@@ -306,6 +316,13 @@
return getFileForPath(config.getLogFile());
}
+ private boolean hasAsyncConfigChanged(FileBasedDebugLogPublisherCfg newConfig)
+ {
+ return !currentConfig.dn().equals(newConfig.dn())
+ && currentConfig.isAutoFlush() != newConfig.isAutoFlush()
+ && currentConfig.getQueueSize() != newConfig.getQueueSize();
+ }
+
private TraceSettings getDefaultSettings(FileBasedDebugLogPublisherCfg config)
{
return new TraceSettings(
--
Gitblit v1.10.0