-func (c *PeerConn) readPeerRequestData(r Request, prs *peerRequestState) ([]byte, error) {
- // Should we depend on Torrent closure here? I think it's okay to get cancelled from elsewhere,
- // or fail to read and then cleanup.
- ctx := context.Background()
- err := prs.allocReservation.Wait(ctx)
- if err != nil {
- if ctx.Err() == nil {
- // The error is from the reservation itself. Something is very broken, or we're not
- // guarding against excessively large requests.
- err = log.WithLevel(log.Critical, err)
- }
- err = fmt.Errorf("waiting for alloc limit reservation: %w", err)
- return nil, err
- }