libnetwork
libnetwork copied to clipboard
[Bug]:A potential goroutine leak in libnetwork/drivers/overlay/peerdb.go
Hello @olljanat, the libnetwork is useful, but I found a bug when I used it, I think we can fix it. In the test file https://github.com/moby/libnetwork/blob/3797618f9a38372e8107d8c06f6ae199e1133ae8/drivers/overlay/overlay_test.go#L134-L144 After the Init has executed and the ctx and cancel are created at https://github.com/moby/libnetwork/blob/3797618f9a38372e8107d8c06f6ae199e1133ae8/drivers/overlay/overlay.go#L75-L77 There is no cancelFunc to awaken the ctx.Done() at https://github.com/moby/libnetwork/blob/3797618f9a38372e8107d8c06f6ae199e1133ae8/drivers/overlay/peerdb.go#L280 So the goroutine will block, and you can use the goleak to reproduce the bug like this
func TestOverlayType(t *testing.T) {
defer goleak.VerifyNone(t)
dt := &driverTester{t: t}
if err := Init(dt, nil); err != nil {
t.Fatal(err)
}
if dt.d.Type() != testNetworkType {
t.Fatalf("Expected Type() to return %q. Instead got %q", testNetworkType,
dt.d.Type())
}
}
And I think we can fix the bug by calling the cleanupDriver() after the init() gets executed.