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