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
|
||||
}
|
||||
|
||||
f, err := os.Open(path)
|
||||
b, err := mergeRecords(path, recs)
|
||||
if err != nil {
|
||||
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)
|
||||
|
||||
_, err = content.ReadFrom(f)
|
||||
if err != nil {
|
||||
return err
|
||||
if _, err := content.ReadFrom(f); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, r := range recs {
|
||||
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
|
||||
|
|
|
@ -275,7 +275,15 @@ func (sb *sandbox) updateDNS(ipv6Enabled bool) error {
|
|||
if err != nil {
|
||||
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 os.Rename(tmpHashFile.Name(), hashFile)
|
||||
|
|
|
@ -135,6 +135,8 @@ func (c *controller) acceptClientConnections(sock string, l net.Listener) {
|
|||
continue
|
||||
}
|
||||
go func() {
|
||||
defer conn.Close()
|
||||
|
||||
err := c.processExternalKey(conn)
|
||||
ret := success
|
||||
if err != nil {
|
||||
|
|
Loading…
Add table
Reference in a new issue