refactor: simplify Forwarder.run by extracing a helper function
Also, don't check for failed receive on fwd.ch; it cannot happen and we weren't doing it everywhere anyway.
This commit is contained in:
1 parent
2d74bb4cfa
commit
1c5fee0a5e
1 file changed
+20
-22
+20
-22
@@ -236,10 +236,7 @@ func (fwd *Forwarder) Start() {
|
||||
|
||||
func (fwd *Forwarder) run() {
|
||||
defer fwd.udpSender.Shutdown()
|
||||
var flushed, ok bool
|
||||
var frame *ForwardedFrame
|
||||
for {
|
||||
flushed = false
|
||||
select {
|
||||
case <-fwd.stop:
|
||||
fwd.drain()
|
||||
@@ -274,29 +271,12 @@ func (fwd *Forwarder) run() {
|
||||
fwd.conn.setEffectivePMTU(epmtu)
|
||||
fwd.conn.Log("Effective PMTU verified at", epmtu)
|
||||
}
|
||||
case frame = <-fwd.ch:
|
||||
case frame := <-fwd.ch:
|
||||
if !fwd.appendFrame(frame) {
|
||||
fwd.logDrop(frame)
|
||||
continue
|
||||
}
|
||||
for !flushed {
|
||||
select {
|
||||
case frame, ok = <-fwd.ch:
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
if !fwd.appendFrame(frame) {
|
||||
fwd.flush()
|
||||
if !fwd.appendFrame(frame) {
|
||||
fwd.logDrop(frame)
|
||||
flushed = true
|
||||
}
|
||||
}
|
||||
default:
|
||||
fwd.flush()
|
||||
flushed = true
|
||||
}
|
||||
}
|
||||
fwd.accumulateAndSendFrames()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -323,6 +303,24 @@ func (fwd *Forwarder) attemptVerifyEffectivePMTU() {
|
||||
}
|
||||
}
|
||||
|
||||
func (fwd *Forwarder) accumulateAndSendFrames() {
|
||||
for {
|
||||
select {
|
||||
case frame := <-fwd.ch:
|
||||
if !fwd.appendFrame(frame) {
|
||||
fwd.flush()
|
||||
if !fwd.appendFrame(frame) {
|
||||
fwd.logDrop(frame)
|
||||
return
|
||||
}
|
||||
}
|
||||
default:
|
||||
fwd.flush()
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (fwd *Forwarder) appendFrame(frame *ForwardedFrame) bool {
|
||||
frameLen := len(frame.frame)
|
||||
if fwd.enc.TotalLen()+fwd.enc.FrameOverhead()+frameLen > fwd.maxPayload {
|
||||
|
||||
Reference in new issue
Block a user