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:
Matthias Radestock committed 2015-03-27 11:03:05 +00:00
1 parent 2d74bb4cfa
commit 1c5fee0a5e
1 file changed
+20 -22
+20 -22
View File
@@ -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 {