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

---
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexBuffer.java |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexBuffer.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexBuffer.java
index 3930130..52da2d0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexBuffer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexBuffer.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions copyright 2014 ForgeRock AS.
  */
 package org.opends.server.backends.jeb;
 
@@ -215,8 +216,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<byte[], BufferedIndexValues>> keyIterator =
-          bufferedValues.entrySet().iterator();
+          bufferedValues.descendingMap().entrySet().iterator();
       while(keyIterator.hasNext())
       {
         Map.Entry<byte[], BufferedIndexValues> bufferedKey =

--
Gitblit v1.10.0