code: @Override
    public int release(String path, FuseFileInfo fi) {
      LOG.trace("release({})", path);
      OpenFileEntry oe;
      final long fd = fi.fh.get();
      synchronized (mOpenFiles) {
        oe = mOpenFiles.getFirstByField(ID_INDEX, fd);
        mOpenFiles.remove(oe);
      }
      if (oe == null) {
        LOG.error("Cannot find fd for {} in table", path);
        return -ErrorCodes.EBADFD();
      }
      try {
        oe.close();
      } catch (IOException e) {
        LOG.error("Failed closing {} [in]", path, e);
      }
      return 0;
    }
docs: Releases the resources associated to an open file. Release() is async.
  
  Guaranteed to be called once for each open() or create().
  
  @param path the FS path of the file to release
  @param fi FileInfo data structure kept by FUSE
  @return 0. The return value is ignored by FUSE (any error should be reported
  on flush instead)