code: public void returnFile(WriterPoolMember writer)
      throws IOException {
          synchronized(this) {
              if(writer.isOversize()) {
              // maybe retire writer rather than recycle
                  if(lastWriterNeededTime<=lastWriterRolloverTime) {
                      // no timeouts waiting for recycled writer since last writer rollover
                      destroyWriter(writer);
                      return;
                  } else {
                      // reuse writer instance, causing new file to be created
                      lastWriterRolloverTime = System.currentTimeMillis();
                  }
              }
          }
          if(!availableWriters.offer(writer)) {
              logger.log(Level.WARNING, "writer unreturnable to available pool; closing early");
              destroyWriter(writer); 
          }
      }
docs: Return a writer, for likely reuse unless (1) writer's current file has
  reached its target size; and (2) there's been no demand for additional
  writers since the last time a new writer-file was rolled-over. In that
  case, the possibly-superfluous writer instance is discarded.
  @param writer Writer to return to the pool.
  @throws IOException Problem returning File to pool.