]> Cypherpunks.ru repositories - govpn.git/commitdiff
Heartbeats can block channels during rehandshake. Make them asynchronous
authorSergey Matveev <stargrave@stargrave.org>
Sun, 15 Mar 2015 16:00:27 +0000 (19:00 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 15 Mar 2015 16:00:27 +0000 (19:00 +0300)
Signed-off-by: Sergey Matveev <stargrave@stargrave.org>
transport.go

index 3c460e61926c44d1c812f16a0c5377fac6ee25de..8c5e8eb249eb65473c38cda1da4892cd0ad182c3 100644 (file)
@@ -112,7 +112,7 @@ func TAPListen(ifaceName string) (*TAP, chan []byte, chan struct{}, chan struct{
                        case <-sinkTerminate:
                                break ListenCycle
                        case <-heartbeat:
-                               sink <- make([]byte, 0)
+                               go func() { sink <- make([]byte, 0) }()
                                continue
                        case <-sinkReady:
                                if exists {
@@ -124,7 +124,7 @@ func TAPListen(ifaceName string) (*TAP, chan []byte, chan struct{}, chan struct{
                HeartbeatCatched:
                        select {
                        case <-heartbeat:
-                               sink <- make([]byte, 0)
+                               go func() { sink <- make([]byte, 0) }()
                                goto HeartbeatCatched
                        case <-sinkTerminate:
                                break ListenCycle