From cde21dec3166a23c12ff79bec0cd975fabc99680 Mon Sep 17 00:00:00 2001 From: criyle Date: Wed, 7 Aug 2019 22:08:59 -0700 Subject: [PATCH] fix too many open files --- deamon/container_init.go | 2 ++ deamon/utils.go | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/deamon/container_init.go b/deamon/container_init.go index b4d36ff..ee6e8fb 100644 --- a/deamon/container_init.go +++ b/deamon/container_init.go @@ -71,6 +71,8 @@ func handleExecve(s *unixsocket.Socket, cmd *Cmd, msg *unixsocket.Msg) error { if msg != nil { files = intSliceToUintptr(msg.Fds) } + // release files after execve + defer closeFds(msg.Fds) if cmd.FdExec && len(files) > 0 { execFile = files[0] files = files[1:] diff --git a/deamon/utils.go b/deamon/utils.go index a30297d..b0fd254 100644 --- a/deamon/utils.go +++ b/deamon/utils.go @@ -1,5 +1,7 @@ package deamon +import "syscall" + func intSliceToUintptr(s []int) []uintptr { var r []uintptr if len(s) > 0 { @@ -21,3 +23,9 @@ func uintptrSliceToInt(s []uintptr) []int { } return r } + +func closeFds(s []int) { + for _, f := range s { + syscall.Close(f) + } +}