From afa2085718b06df57bb32d2dca748012f5f55b18 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 19 Jun 2012 09:07:19 +0000
Subject: [PATCH] Fix OPENDJ-506: NoSuchElementException thrown during replication in java.util.TreeMap.key(TreeMap.java:1221)
---
opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java | 9 +++++++--
1 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java
index 0f4b2bd..3791a40 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java
@@ -72,7 +72,9 @@
*/
private final MsgQueue msgQueue = new MsgQueue();
/**
- * Late queue.
+ * Late queue. All access to the lateQueue in getNextMessage() is
+ * single-threaded. However, reads from threads calling getOlderUpdateCN()
+ * need protecting against removals performed using getNextMessage().
*/
private final MsgQueue lateQueue = new MsgQueue();
/**
@@ -405,7 +407,10 @@
} else
{
/* get the next change from the lateQueue */
- msg = lateQueue.removeFirst();
+ synchronized (msgQueue)
+ {
+ msg = lateQueue.removeFirst();
+ }
this.updateServerState(msg);
return msg;
}
--
Gitblit v1.10.0