From 165eb4e8aac72068def0ee3a53f48b1ec0b96c0d Mon Sep 17 00:00:00 2001
From: abobrov <abobrov@localhost>
Date: Thu, 30 Apr 2009 15:10:47 +0000
Subject: [PATCH] - plug ConcurrentModificationException highlighted by nightly tests.

---
 opends/src/server/org/opends/server/backends/task/TaskBackend.java |   65 ++++++++++++++++++--------------
 1 files changed, 37 insertions(+), 28 deletions(-)

diff --git a/opends/src/server/org/opends/server/backends/task/TaskBackend.java b/opends/src/server/org/opends/server/backends/task/TaskBackend.java
index d00a78d..c2eba38 100644
--- a/opends/src/server/org/opends/server/backends/task/TaskBackend.java
+++ b/opends/src/server/org/opends/server/backends/task/TaskBackend.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2009 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.task;
 
@@ -521,38 +521,47 @@
       return null;
     }
 
-    if (entryDN.equals(taskRootDN))
-    {
-      return taskScheduler.getTaskRootEntry();
-    }
-    else if (entryDN.equals(scheduledTaskParentDN))
-    {
-      return taskScheduler.getScheduledTaskParentEntry();
-    }
-    else if (entryDN.equals(recurringTaskParentDN))
-    {
-      return taskScheduler.getRecurringTaskParentEntry();
-    }
+    Lock lock = taskScheduler.readLockEntry(entryDN);
 
-    DN parentDN = entryDN.getParentDNInSuffix();
-    if (parentDN == null)
+    try
     {
-      return null;
-    }
+      if (entryDN.equals(taskRootDN))
+      {
+        return taskScheduler.getTaskRootEntry();
+      }
+      else if (entryDN.equals(scheduledTaskParentDN))
+      {
+        return taskScheduler.getScheduledTaskParentEntry();
+      }
+      else if (entryDN.equals(recurringTaskParentDN))
+      {
+        return taskScheduler.getRecurringTaskParentEntry();
+      }
 
-    if (parentDN.equals(scheduledTaskParentDN))
-    {
-      return taskScheduler.getScheduledTaskEntry(entryDN);
+      DN parentDN = entryDN.getParentDNInSuffix();
+      if (parentDN == null)
+      {
+        return null;
+      }
+
+      if (parentDN.equals(scheduledTaskParentDN))
+      {
+        return taskScheduler.getScheduledTaskEntry(entryDN);
+      }
+      else if (parentDN.equals(recurringTaskParentDN))
+      {
+        return taskScheduler.getRecurringTaskEntry(entryDN);
+      }
+      else
+      {
+        // If we've gotten here then this is not an entry
+        // that should exist in the task backend.
+        return null;
+      }
     }
-    else if (parentDN.equals(recurringTaskParentDN))
+    finally
     {
-      return taskScheduler.getRecurringTaskEntry(entryDN);
-    }
-    else
-    {
-      // If we've gotten here then this is not an entry that should exist in the
-      // task backend.
-      return null;
+      taskScheduler.unlockEntry(entryDN, lock);
     }
   }
 

--
Gitblit v1.10.0