code: func (c *Client) die(err error, close bool, fromCallback bool) error {
  	c.finish.Do(func() {
  		err = c.cleanup(err, close, false)
  
  		if c.Callback != nil && !fromCallback {
  			returnedErr := c.Callback(nil, err)
  			if returnedErr == nil {
  				err = nil
  			}
  		}
  	})
  
  	return err
  }
docs: // used for closing and cleaning up from internal goroutines