code: func (c *Client) processPubackAndPubcomp(id packet.ID) error {
  	// remove packet from store
  	err := c.session.DeletePacket(session.Outgoing, id)
  	if err != nil {
  		return c.die(SessionError, err)
  	}
  
  	// put back dequeue token
  	select {
  	case c.dequeueTokens <- struct{}{}:
  	default:
  		// continue if full for some reason
  	}
  
  	return nil
  }
docs: // handle an incoming p or pubcomp packet