code: void performCleanUp(@Nullable Runnable task) {
      evictionLock.lock();
      try {
        maintenance(task);
      } finally {
        evictionLock.unlock();
      }
      if ((drainStatus() == REQUIRED) && (executor == ForkJoinPool.commonPool())) {
        scheduleDrainBuffers();
      }
    }
docs: Performs the maintenance work, blocking until the lock is acquired. Any exception thrown, such
  as by {@link CacheWriter#delete}, is propagated to the caller.
  
  @param task an additional pending task to run, or {@code null} if not present