From adedc477db26cbdc9b5874fb5ec3805dafdd3ac3 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Mon, 22 Dec 2014 23:42:56 +0000
Subject: [PATCH] OPENDJ-1710: NPE performing deletes and potentially other indexed updates against Persistit backend
---
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java | 14 +++++++++++---
1 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
index b06bd13..42a4092 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
@@ -238,7 +238,12 @@
@Override
public Cursor openCursor(TreeName treeName) {
try {
- return new CursorImpl(getExchange(treeName));
+ /*
+ * Acquire a new exchange for the cursor rather than using a cached
+ * exchange in order to avoid reentrant accesses to the same tree
+ * interfering with the cursor position.
+ */
+ return new CursorImpl(getExchange0(treeName, false));
} catch (PersistitException e) {
throw new StorageRuntimeException(e);
}
@@ -371,8 +376,11 @@
@Override
public void close() {
- // Exchange is released by StorageImpl.release()
- // once the Read/Write Operation is closed
+ /*
+ * Release immediately because this exchange did not come from the txn
+ * cache.
+ */
+ db.releaseExchange(ex);
}
}
--
Gitblit v1.10.0