derp: reduce DERP memory use; don't require callers to pass in memory to use

The magicsock derpReader was holding onto 65KB for each DERP
connection forever, just in case.

Make the derp{,http}.Client be in charge of memory instead. It can
reuse its bufio.Reader buffer space.
This commit is contained in:
Brad Fitzpatrick
2020-06-15 10:26:50 -07:00
parent 15a23ce65f
commit abd79ea368
6 changed files with 62 additions and 30 deletions

View File

@ -1000,7 +1000,6 @@ func (c *Conn) runDerpReader(ctx context.Context, derpFakeAddr *net.UDPAddr, dc
}
didCopy := make(chan struct{}, 1)
var buf [derp.MaxPacketSize]byte
res := derpReadResult{derpAddr: derpFakeAddr}
var pkt derp.ReceivedPacket
@ -1015,7 +1014,7 @@ func (c *Conn) runDerpReader(ctx context.Context, derpFakeAddr *net.UDPAddr, dc
peerPresent := map[key.Public]bool{}
for {
msg, err := dc.Recv(buf[:])
msg, err := dc.Recv()
if err == derphttp.ErrClientClosed {
return
}