diff --git a/container/container.go b/container/container.go index 2ab5dfdf..f41c006a 100644 --- a/container/container.go +++ b/container/container.go @@ -78,4 +78,7 @@ type ContainerHandler interface { // Returns whether the container still exists. Exists() bool + + // Cleanup frees up any resources being held like fds or go routines, etc. + Cleanup() } diff --git a/container/docker/handler.go b/container/docker/handler.go index 0c18de24..2a1b3661 100644 --- a/container/docker/handler.go +++ b/container/docker/handler.go @@ -160,6 +160,10 @@ func newDockerContainerHandler( return handler, nil } +func (self *dockerContainerHandler) Cleanup() { + self.fsHandler.stop() +} + func (self *dockerContainerHandler) ContainerReference() (info.ContainerReference, error) { return info.ContainerReference{ Name: self.name, diff --git a/container/mock.go b/container/mock.go index 1e438a31..40a80419 100644 --- a/container/mock.go +++ b/container/mock.go @@ -51,6 +51,8 @@ func (self *MockContainerHandler) ContainerReference() (info.ContainerReference, return args.Get(0).(info.ContainerReference), args.Error(1) } +func (self *MockContainerHandler) Cleanup() {} + func (self *MockContainerHandler) GetSpec() (info.ContainerSpec, error) { args := self.Called() return args.Get(0).(info.ContainerSpec), args.Error(1) diff --git a/container/raw/handler.go b/container/raw/handler.go index 3fec8f1b..4e0a22d3 100644 --- a/container/raw/handler.go +++ b/container/raw/handler.go @@ -166,6 +166,9 @@ func (self *rawContainerHandler) GetRootNetworkDevices() ([]info.NetInfo, error) return nd, nil } +// Nothing to clean up. +func (self *rawContainerHandler) Cleanup() {} + func (self *rawContainerHandler) GetSpec() (info.ContainerSpec, error) { var spec info.ContainerSpec diff --git a/manager/container.go b/manager/container.go index 83ce0904..2ebae11d 100644 --- a/manager/container.go +++ b/manager/container.go @@ -373,6 +373,8 @@ func (c *containerData) housekeeping() { for { select { case <-c.stop: + // Cleanup container resources before stopping housekeeping. + c.handler.Cleanup() // Stop housekeeping when signaled. return default: