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

Nicolas Capponi
16.15.2015 5f13892a157ea60b88841e7d9895ee0988944a72
Prevent ConcurrentModificationException in Log read-only methods

Add missing usage of shared lock in getNewestRecord(),
getOldestRecord() and getNumberOfRecords() methods
1 files modified
36 ■■■■ changed files
opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/file/Log.java 36 ●●●● patch | view | raw | blame | history
opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/file/Log.java
@@ -21,7 +21,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2014 ForgeRock AS.
 *      Copyright 2014-2015 ForgeRock AS.
 */
package org.opends.server.replication.server.changelog.file;
@@ -624,7 +624,15 @@
   */
  public Record<K, V> getOldestRecord() throws ChangelogException
  {
    return getOldestLogFile().getOldestRecord();
    sharedLock.lock();
    try
    {
      return getOldestLogFile().getOldestRecord();
    }
    finally
    {
      sharedLock.unlock();
    }
  }
@@ -637,7 +645,15 @@
   */
  public Record<K, V> getNewestRecord() throws ChangelogException
  {
    return getHeadLogFile().getNewestRecord();
    sharedLock.lock();
    try
    {
      return getHeadLogFile().getNewestRecord();
    }
    finally
    {
      sharedLock.unlock();
    }
  }
  /**
@@ -650,11 +666,19 @@
  public long getNumberOfRecords() throws ChangelogException
  {
    long count = 0;
    for (final LogFile<K, V> logFile : logFiles.values())
    sharedLock.lock();
    try
    {
      count += logFile.getNumberOfRecords();
      for (final LogFile<K, V> logFile : logFiles.values())
      {
        count += logFile.getNumberOfRecords();
      }
      return count;
    }
    return count;
    finally
    {
      sharedLock.unlock();
    }
  }
  /**