code: @Override
    public synchronized void close() throws IOException {
      try {
        if (closed) {
          return;
        }
        dfsClient.checkOpen();
  
        if (blockReader != null) {
          closeBlockReader(blockReader, false);
          blockReader = null;
        }
  
        for (BlockReaderLocalBase brl : localBlockReaders.values()) {
          try {
            brl.close();
          } catch (IOException ioe) {
            DFSClient.LOG.warn("Error when closing local block reader", ioe);
          }
        }
        localBlockReaders = null;
  
        super.close();
        closed = true;
      } finally {
        // Avoid memory leak by making sure we remove the file from the renewal
        // threads map even in case of failures during close.
        if (dfsClient.blockLocationRenewal != null) {
          dfsClient.blockLocationRenewal.remove(this);
        }
      }
    }
docs: Close it down!