From 1c5fee0a5efe5e859d03f601fc17033477a67281 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Fri, 27 Mar 2015 10:59:23 +0000 Subject: [PATCH] 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. --- router/forwarder.go | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/router/forwarder.go b/router/forwarder.go index 94025bce..fee2d2d0 100644 --- a/router/forwarder.go +++ b/router/forwarder.go @@ -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 {