From ef73b392c67d1fd15ec6a2a3ea1b587bb4709b5a 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.

---
 opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskBackend.java   |   65 ++++++++++++++++++--------------
 opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java |    2 
 2 files changed, 38 insertions(+), 29 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskBackend.java b/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskBackend.java
index d00a78d..c2eba38 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskBackend.java
+++ b/opendj-sdk/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);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java b/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java
index df172ef..45e0188 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java
@@ -139,7 +139,7 @@
   private LinkedList<TaskThread> idleThreads;
 
   // The lock used to provide threadsafe access to the scheduler.
-  private ReentrantLock schedulerLock;
+  private final ReentrantLock schedulerLock;
 
   // The task backend with which this scheduler is associated.
   private TaskBackend taskBackend;

--
Gitblit v1.10.0