code: @Override
      public synchronized void releaseReadLock(final Lock lock) {
          if (lock == null || lock.name == null || lock.name.isEmpty()) {
              throw new InvalidArgument("lock is invalid");
          }
  
          if (locks.containsKey(lock.name)) {
              locks.remove(lock.name);
  
              final Set<File> readLocks = getReadLocks();
              for (final File readLock : readLocks) {
                  if (readLock.getName().endsWith(lock.name)) {
                      if (!readLock.delete()) {
                          throw new IllegalStateException(
                                  "read lock could not be deleted");
                      }
  
                      readLocks.remove(readLock);
                      return;
                  }
              }
          }
  
          throw new InvalidArgument("read lock '" + lock.name
                  + "' is unknown");
      }
docs: {@inheritDoc}
  <p>
  This will remove the {@link File read lock file} in
  {@link LockAdviser#readLocks} that represents the read lock.
  </p>