aboutsummaryrefslogtreecommitdiffstats
path: root/receive.go
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2018-04-18 20:29:48 +0200
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2018-04-18 20:29:48 +0200
commitac9912345b4da5034ea93f5f245ea2ce04815bd5 (patch)
treeb371c03e54c7d1ee2c882fdf596b011a936d2ad7 /receive.go
parentAllow determining name (diff)
downloadwireguard-go-ac9912345b4da5034ea93f5f245ea2ce04815bd5.tar.xz
wireguard-go-ac9912345b4da5034ea93f5f245ea2ce04815bd5.zip
Fixed read from closed channel
A premature waitgroup .Done resulted in reading from closed channel. This caused a nil-pointer deref & crash. Added additional debugging when closing routines.
Diffstat (limited to 'receive.go')
-rw-r--r--receive.go10
1 files changed, 7 insertions, 3 deletions
diff --git a/receive.go b/receive.go
index 96ba08d..1045cee 100644
--- a/receive.go
+++ b/receive.go
@@ -500,8 +500,8 @@ func (peer *Peer) RoutineSequentialReceiver() {
logError := device.log.Error
logDebug := device.log.Debug
- func() {
- defer peer.routines.stopping.Done()
+ defer func() {
+ peer.routines.stopping.Done()
logDebug.Println(peer.String(), ": Routine, Sequential Receiver, Stopped")
}()
@@ -516,7 +516,11 @@ func (peer *Peer) RoutineSequentialReceiver() {
case <-peer.routines.stop.Wait():
return
- case elem := <-peer.queue.inbound:
+ case elem, ok := <-peer.queue.inbound:
+
+ if !ok {
+ return
+ }
// wait for decryption