mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Ludovic Poitou
01.59.2013 0bd15da0682c55a6f3e3da8535fc2ce891488961
opends/src/server/org/opends/server/core/GroupManager.java
@@ -124,7 +124,8 @@
  // A mapping between the DNs of all group entries and the corresponding
  // group instances.
  private DITCacheMap<Group> groupInstances;
  private DITCacheMap<Group>
      groupInstances;
  // Lock to protect internal data structures.
  private final ReentrantReadWriteLock lock;
@@ -767,16 +768,7 @@
        }
      }
    }
    lock.writeLock().lock();
    try
    {
      createAndRegisterGroup(entry);
      refreshToken++;
    }
    finally
    {
      lock.writeLock().unlock();
    }
    createAndRegisterGroup(entry);
  }
@@ -802,8 +794,10 @@
    lock.writeLock().lock();
    try
    {
      groupInstances.removeSubtree(entry.getDN(), null);
      refreshToken++;
      if (groupInstances.removeSubtree(entry.getDN(), null))
      {
        refreshToken++;
      }
    }
    finally
    {
@@ -834,6 +828,21 @@
      }
    }
    lock.readLock().lock();
    try
    {
      if (!groupInstances.containsKey(oldEntry.getDN()))
      {
        // If the modified entry is not in any group instance, it's probably
        // not a group, exit fast
        return;
      }
    }
    finally
    {
      lock.readLock().unlock();
    }
    lock.writeLock().lock();
    try
    {
@@ -845,7 +854,6 @@
          groupInstances.remove(oldEntry.getDN());
        }
        createAndRegisterGroup(newEntry);
        refreshToken++;
      }
    }
    finally
@@ -911,7 +919,10 @@
        group.setGroupDN(groupDN);
        groupInstances.put(groupDN, group);
      }
      refreshToken++;
      if (!groupSet.isEmpty())
      {
        refreshToken++;
      }
    }
    finally
    {
@@ -1078,6 +1089,7 @@
          try
          {
            groupInstances.put(entry.getDN(), groupInstance);
            refreshToken++;
          }
          finally
          {