From 5aca3171444ee4ad8ecf62343726df4720fb7cb0 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 05 May 2015 12:11:12 +0000
Subject: [PATCH] OPENDJ-1994 Setup with persistit backend containing automatically generated data hangs

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
index 1b0c08f..c1e9d80 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
@@ -46,6 +46,8 @@
 import java.util.ListIterator;
 import java.util.Map;
 import java.util.NoSuchElementException;
+import java.util.Queue;
+import java.util.concurrent.ConcurrentLinkedDeque;
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
@@ -247,18 +249,29 @@
   private final class ImporterImpl implements Importer
   {
     private final Map<TreeName, Tree> trees = new HashMap<TreeName, Tree>();
+    private final Queue<Map<TreeName, Exchange>> allExchanges = new ConcurrentLinkedDeque<>();
     private final ThreadLocal<Map<TreeName, Exchange>> exchanges = new ThreadLocal<Map<TreeName, Exchange>>()
     {
       @Override
       protected Map<TreeName, Exchange> initialValue()
       {
-        return new HashMap<TreeName, Exchange>();
+        final Map<TreeName, Exchange> value = new HashMap<>();
+        allExchanges.add(value);
+        return value;
       }
     };
 
     @Override
     public void close()
     {
+      for (Map<TreeName, Exchange> map : allExchanges)
+      {
+        for (Exchange exchange : map.values())
+        {
+          db.releaseExchange(exchange);
+        }
+        map.clear();
+      }
       PersistItStorage.this.close();
     }
 

--
Gitblit v1.10.0