diff --git a/utils/cpuload/netlink/netlink.go b/utils/cpuload/netlink/netlink.go index 7ca05f36..e32b3fd9 100644 --- a/utils/cpuload/netlink/netlink.go +++ b/utils/cpuload/netlink/netlink.go @@ -18,6 +18,7 @@ import ( "bytes" "encoding/binary" "fmt" + "os" "syscall" info "github.com/google/cadvisor/info/v1" @@ -219,10 +220,10 @@ func verifyHeader(msg syscall.NetlinkMessage) error { // Get load stats for a task group. // id: family id for taskstats. -// fd: fd to path to the cgroup directory under cpu hierarchy. +// cfd: open file to path to the cgroup directory under cpu hierarchy. // conn: open netlink connection used to communicate with kernel. -func getLoadStats(id uint16, fd uintptr, conn *Connection) (info.LoadStats, error) { - msg := prepareCmdMessage(id, fd) +func getLoadStats(id uint16, cfd *os.File, conn *Connection) (info.LoadStats, error) { + msg := prepareCmdMessage(id, cfd.Fd()) err := conn.WriteMessage(msg.toRawMsg()) if err != nil { return info.LoadStats{}, err diff --git a/utils/cpuload/netlink/reader.go b/utils/cpuload/netlink/reader.go index 4e3aa681..1f43d755 100644 --- a/utils/cpuload/netlink/reader.go +++ b/utils/cpuload/netlink/reader.go @@ -66,11 +66,12 @@ func (self *NetlinkReader) GetCpuLoad(name string, path string) (info.LoadStats, } cfd, err := os.Open(path) + defer cfd.Close() if err != nil { return info.LoadStats{}, fmt.Errorf("failed to open cgroup path %s: %q", path, err) } - stats, err := getLoadStats(self.familyId, cfd.Fd(), self.conn) + stats, err := getLoadStats(self.familyId, cfd, self.conn) if err != nil { return info.LoadStats{}, err }