From 25dac9c266bda7e12badf795984da0cfcf2dff41 Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Mon, 27 Aug 2007 11:31:55 +0000
Subject: [PATCH] fix for issue 2150 : ConcurrentModificationException in InitializeTask
---
opends/src/server/org/opends/server/backends/task/Task.java | 42 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/opends/src/server/org/opends/server/backends/task/Task.java b/opends/src/server/org/opends/server/backends/task/Task.java
index 10a9cd7..1a83f2d 100644
--- a/opends/src/server/org/opends/server/backends/task/Task.java
+++ b/opends/src/server/org/opends/server/backends/task/Task.java
@@ -53,6 +53,8 @@
import org.opends.server.types.DirectoryException;
import org.opends.server.types.DN;
import org.opends.server.types.Entry;
+import org.opends.server.types.Modification;
+import org.opends.server.types.ModificationType;
import org.opends.server.types.InitializationException;
@@ -594,6 +596,46 @@
}
}
+ /**
+ * Replaces an attribute values of the task entry.
+ *
+ * @param name The name of the attribute that must be replaced.
+ *
+ * @param value The value that must replace the previous values of the
+ * attribute.
+ *
+ * @throws DirectoryException When an error occurs.
+ */
+ protected void replaceAttributeValue(String name, String value)
+ throws DirectoryException
+ {
+ // We only need to grab the entry-level lock if we don't already hold the
+ // broader scheduler lock.
+ boolean needLock = (! taskScheduler.holdsSchedulerLock());
+ Lock lock = null;
+ if (needLock)
+ {
+ lock = taskScheduler.writeLockEntry(taskEntryDN);
+ }
+
+ try
+ {
+ Entry taskEntry = getTaskEntry();
+
+ ArrayList<Modification> modifications = new ArrayList<Modification>();
+ modifications.add(new Modification(ModificationType.REPLACE,
+ new Attribute(name, value)));
+
+ taskEntry.applyModifications(modifications);
+ }
+ finally
+ {
+ if (needLock)
+ {
+ taskScheduler.unlockEntry(taskEntryDN, lock);
+ }
+ }
+ }
/**
--
Gitblit v1.10.0