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/TextAuditLogPublisher.java |   27 ++++++++++++++++++++++-----
 1 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/loggers/TextAuditLogPublisher.java b/opendj-server-legacy/src/main/java/org/opends/server/loggers/TextAuditLogPublisher.java
index 5491222..0c760f7 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/loggers/TextAuditLogPublisher.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/loggers/TextAuditLogPublisher.java
@@ -82,9 +82,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);
           }
         }
@@ -92,10 +102,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);
           }
         }
 
@@ -150,6 +160,13 @@
     return getFileForPath(config.getLogFile());
   }
 
+  private boolean hasAsyncConfigChanged(FileBasedAuditLogPublisherCfg newConfig)
+  {
+    return !cfg.dn().equals(newConfig.dn())
+        && cfg.isAutoFlush() != newConfig.isAutoFlush()
+        && cfg.getQueueSize() != newConfig.getQueueSize();
+  }
+
   @Override
   protected void close0()
   {

--
Gitblit v1.10.0