Skip to content

Commit

Permalink
Fix leak of watchMiss goroutine
Browse files Browse the repository at this point in the history
The netlink socket that was used to monitor the L2
miss was never being closed. The watchMiss goroutine
spawned was never returning. This was causing goroutine
leak in case of createNetwork/destroyNetwork

Signed-off-by: Flavio Crisciani <[email protected]>
  • Loading branch information
Flavio Crisciani committed Jun 6, 2017
1 parent eed0fe8 commit 65e0999
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions drivers/overlay/ov_network.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ type network struct {
dbIndex uint64
dbExists bool
sbox osl.Sandbox
nlSocket *nl.NetlinkSocket
endpoints endpointTable
driver *driver
joinCnt int
Expand Down Expand Up @@ -345,6 +346,12 @@ func (n *network) destroySandbox() {
}
}

// Close the netlink socket, this will also release the watchMiss goroutine that is using it
if n.nlSocket != nil {
n.nlSocket.Close()
n.nlSocket = nil
}

n.sbox.Destroy()
n.sbox = nil
}
Expand Down Expand Up @@ -685,6 +692,7 @@ func (n *network) initSandbox(restore bool) error {
sbox.InvokeFunc(func() {
nlSock, err = nl.Subscribe(syscall.NETLINK_ROUTE, syscall.RTNLGRP_NEIGH)
})
n.setNetlinkSocket(nlSock)

if err == nil {
go n.watchMiss(nlSock)
Expand All @@ -700,6 +708,13 @@ func (n *network) watchMiss(nlSock *nl.NetlinkSocket) {
for {
msgs, err := nlSock.Receive()
if err != nil {
n.Lock()
nlFd := nlSock.GetFd()
n.Unlock()
if nlFd == -1 {
// The netlink socket got closed, simply exit to not leak this goroutine
return
}
logrus.Errorf("Failed to receive from netlink: %v ", err)
continue
}
Expand Down Expand Up @@ -816,6 +831,12 @@ func (n *network) setSandbox(sbox osl.Sandbox) {
n.Unlock()
}

func (n *network) setNetlinkSocket(nlSk *nl.NetlinkSocket) {
n.Lock()
n.nlSocket = nlSk
n.Unlock()
}

func (n *network) vxlanID(s *subnet) uint32 {
n.Lock()
defer n.Unlock()
Expand Down

0 comments on commit 65e0999

Please sign in to comment.