From c26d4d70df1e4ddf24df912c6107f140499e78b2 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 23 Sep 2014 08:55:04 +0000
Subject: [PATCH] OPENDJ-1375 CR-4618: prevent deadlocks when updating id2subtree using IndexBuffers

---
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
index f26a909..f88f04a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
@@ -214,8 +214,13 @@
 
     if(bufferedValues != null)
     {
+      /*
+       * OPENDJ-1375: add keys in reverse order to be consistent with single
+       * entry processing in add/delete processing. This is necessary in order
+       * to avoid deadlocks.
+       */
       Iterator<Map.Entry<ByteString, BufferedIndexValues>> keyIterator =
-          bufferedValues.entrySet().iterator();
+          bufferedValues.descendingMap().entrySet().iterator();
       while(keyIterator.hasNext())
       {
         Map.Entry<ByteString, BufferedIndexValues> bufferedKey =

--
Gitblit v1.10.0