mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Fix file descriptor leaks
Ensures network connections and file are closed when done writing. Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
This commit is contained in:
parent
3f6e3727e3
commit
ccabedfbe3
3 changed files with 26 additions and 7 deletions
|
@ -119,25 +119,34 @@ func Add(path string, recs []Record) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
f, err := os.Open(path)
|
b, err := mergeRecords(path, recs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return ioutil.WriteFile(path, b, 0644)
|
||||||
|
}
|
||||||
|
|
||||||
|
func mergeRecords(path string, recs []Record) ([]byte, error) {
|
||||||
|
f, err := os.Open(path)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
content := bytes.NewBuffer(nil)
|
content := bytes.NewBuffer(nil)
|
||||||
|
|
||||||
_, err = content.ReadFrom(f)
|
if _, err := content.ReadFrom(f); err != nil {
|
||||||
if err != nil {
|
return nil, err
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, r := range recs {
|
for _, r := range recs {
|
||||||
if _, err := r.WriteTo(content); err != nil {
|
if _, err := r.WriteTo(content); err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ioutil.WriteFile(path, content.Bytes(), 0644)
|
return content.Bytes(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete deletes an arbitrary number of Records already existing in /etc/hosts file
|
// Delete deletes an arbitrary number of Records already existing in /etc/hosts file
|
||||||
|
|
|
@ -275,7 +275,15 @@ func (sb *sandbox) updateDNS(ipv6Enabled bool) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err = ioutil.WriteFile(tmpHashFile.Name(), []byte(newRC.Hash), filePerm); err != nil {
|
if err = tmpHashFile.Chmod(filePerm); err != nil {
|
||||||
|
tmpHashFile.Close()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = tmpHashFile.Write([]byte(newRC.Hash))
|
||||||
|
if err1 := tmpHashFile.Close(); err == nil {
|
||||||
|
err = err1
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return os.Rename(tmpHashFile.Name(), hashFile)
|
return os.Rename(tmpHashFile.Name(), hashFile)
|
||||||
|
|
|
@ -135,6 +135,8 @@ func (c *controller) acceptClientConnections(sock string, l net.Listener) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
go func() {
|
go func() {
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
err := c.processExternalKey(conn)
|
err := c.processExternalKey(conn)
|
||||||
ret := success
|
ret := success
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Add table
Reference in a new issue