Skip to content

Commit 4675207

Browse files
authored
Merge pull request #4406 from ningmingxiao/fix_fifo_leak
fix:fifo leak
2 parents 507bfee + 342eaca commit 4675207

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

cmd/nerdctl/container/container_run_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import (
4040
"github.com/containerd/nerdctl/mod/tigron/tig"
4141

4242
"github.com/containerd/nerdctl/v2/cmd/nerdctl/helpers"
43+
"github.com/containerd/nerdctl/v2/pkg/rootlessutil"
4344
"github.com/containerd/nerdctl/v2/pkg/testutil"
4445
"github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest"
4546
)
@@ -1058,3 +1059,47 @@ HEALTHCHECK --interval=30s --timeout=10s CMD wget -q --spider http://localhost:8
10581059

10591060
testCase.Run(t)
10601061
}
1062+
1063+
func countFIFOFiles(root string) (int, error) {
1064+
count := 0
1065+
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
1066+
if err != nil {
1067+
return err
1068+
}
1069+
if info.Mode()&os.ModeNamedPipe != 0 {
1070+
count++
1071+
}
1072+
return nil
1073+
})
1074+
return count, err
1075+
}
1076+
func TestCleanupFIFOs(t *testing.T) {
1077+
if rootlessutil.IsRootless() {
1078+
t.Skip("/run/containerd/fifo/ doesn't exist on rootless")
1079+
}
1080+
if runtime.GOOS == "windows" {
1081+
t.Skip("test is not compatible with windows")
1082+
}
1083+
testutil.DockerIncompatible(t)
1084+
testCase := nerdtest.Setup()
1085+
testCase.NoParallel = true
1086+
testCase.Setup = func(data test.Data, helpers test.Helpers) {
1087+
cmd := helpers.Command("run", "-it", "--rm", testutil.CommonImage, "date")
1088+
cmd.WithPseudoTTY()
1089+
cmd.Run(&test.Expected{
1090+
ExitCode: 0,
1091+
})
1092+
oldNumFifos, err := countFIFOFiles("/run/containerd/fifo/")
1093+
assert.NilError(t, err)
1094+
1095+
cmd = helpers.Command("run", "-it", "--rm", testutil.CommonImage, "date")
1096+
cmd.WithPseudoTTY()
1097+
cmd.Run(&test.Expected{
1098+
ExitCode: 0,
1099+
})
1100+
newNumFifos, err := countFIFOFiles("/run/containerd/fifo/")
1101+
assert.NilError(t, err)
1102+
assert.Equal(t, oldNumFifos, newNumFifos)
1103+
}
1104+
testCase.Run(t)
1105+
}

pkg/cioutil/container_io.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@ func (c *ncio) Close() error {
8585

8686
select {
8787
case err := <-done:
88-
return err
88+
if err != nil {
89+
lastErr = fmt.Errorf("faied to run cmd.wait: %w", err)
90+
}
8991
case <-time.After(binaryIOProcTermTimeout):
9092

9193
err := c.cmd.Process.Kill()

0 commit comments

Comments
 (0)