code: func (rld *ReadersAndUpdates) dropReaders() error {
  	rld.Lock()
  	defer rld.Unlock()
  
  	// TODO: can we somehow use IOUtils here...?
  	// problem is we are calling .decRef not .close)...
  	err := func() (err error) {
  		defer func() {
  			if rld.mergeReader != nil {
  				log.Printf("  pool.drop info=%v merge rc=%v", rld.info, rld.mergeReader.refCount)
  				defer func() { rld.mergeReader = nil }()
  				err2 := rld.mergeReader.decRef()
  				if err == nil {
  					err = err2
  				} else {
  					log.Printf("Escaped error: %v", err2)
  				}
  			}
  		}()
  
  		if rld._reader != nil {
  			log.Printf("  pool.drop info=%v merge rc=%v", rld.info, rld._reader.refCount)
  			defer func() { rld._reader = nil }()
  			return rld._reader.decRef()
  		}
  		return nil
  	}()
  	if err != nil {
  		return err
  	}
  	rld.decRef()
  	return nil
  }
docs: // NOTE: removes callers ref