libnetwork icon indicating copy to clipboard operation
libnetwork copied to clipboard

[Bug]:A potential goroutine leak in libnetwork/drivers/overlay/peerdb.go

Open xuxiaofan1203 opened this issue 10 months ago • 2 comments

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())
	}
}

1712385445732 And I think we can fix the bug by calling the cleanupDriver() after the init() gets executed.

xuxiaofan1203 avatar Apr 06 '24 06:04 xuxiaofan1203