code: func (t *transfer) Release(watcher *Watcher) {
  	t.mu.Lock()
  	delete(t.watchers, watcher.releaseChan)
  
  	if len(t.watchers) == 0 {
  		if t.closed {
  			// released may have been closed already if all
  			// watchers were released, then another one was added
  			// while waiting for a previous watcher goroutine to
  			// finish.
  			select {
  			case <-t.released:
  			default:
  				close(t.released)
  			}
  		} else {
  			t.cancel()
  		}
  	}
  	t.mu.Unlock()
  
  	close(watcher.releaseChan)
  	// Block until the watcher goroutine completes
  	<-watcher.running
  }
docs: // Release is the inverse of Watch; indicating that the watcher no longer wants
  // to be notified about the progress of the transfer. All calls to Watch must
  // be paired with later calls to Release so that the lifecycle of the transfer
  // is properly managed.