Merge pull request #494 from Arceliar/bufpersession

Per-session front-dropping buffers for incoming traffic
This commit is contained in:
Arceliar 2019-08-07 18:15:20 -05:00 committed by GitHub
commit ae05683c73
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -508,6 +508,32 @@ func (sinfo *sessionInfo) recvWorker() {
util.WorkerGo(poolFunc) util.WorkerGo(poolFunc)
callbacks = append(callbacks, ch) callbacks = append(callbacks, ch)
} }
fromHelper := make(chan wire_trafficPacket, 1)
go func() {
var buf []wire_trafficPacket
for {
for len(buf) > 0 {
select {
case <-sinfo.cancel.Finished():
return
case p := <-sinfo.fromRouter:
buf = append(buf, p)
for len(buf) > 64 { // Based on nonce window size
util.PutBytes(buf[0].Payload)
buf = buf[1:]
}
case fromHelper <- buf[0]:
buf = buf[1:]
}
}
select {
case <-sinfo.cancel.Finished():
return
case p := <-sinfo.fromRouter:
buf = append(buf, p)
}
}
}()
for { for {
for len(callbacks) > 0 { for len(callbacks) > 0 {
select { select {
@ -516,14 +542,14 @@ func (sinfo *sessionInfo) recvWorker() {
f() f()
case <-sinfo.cancel.Finished(): case <-sinfo.cancel.Finished():
return return
case p := <-sinfo.fromRouter: case p := <-fromHelper:
doRecv(p) doRecv(p)
} }
} }
select { select {
case <-sinfo.cancel.Finished(): case <-sinfo.cancel.Finished():
return return
case p := <-sinfo.fromRouter: case p := <-fromHelper:
doRecv(p) doRecv(p)
} }
} }