Skip to content

Commit 0ead624

Browse files
committedAug 10, 2016
add defer file.Close to avoid potential fd leak
Signed-off-by: allencloud <[email protected]>
1 parent 2684459 commit 0ead624

25 files changed

+91
-24
lines changed
 

‎api/client/image/build.go

+1
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ func runBuild(dockerCli *client.DockerCli, options buildOptions) error {
162162
if err != nil && !os.IsNotExist(err) {
163163
return err
164164
}
165+
defer f.Close()
165166

166167
var excludes []string
167168
if err == nil {

‎builder/dockerfile/internals.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -255,9 +255,9 @@ func (b *Builder) download(srcURL string) (fi builder.FileInfo, err error) {
255255
// ignoring error because the file was already opened successfully
256256
tmpFileSt, err := tmpFile.Stat()
257257
if err != nil {
258+
tmpFile.Close()
258259
return
259260
}
260-
tmpFile.Close()
261261

262262
// Set the mtime to the Last-Modified header value if present
263263
// Otherwise just remove atime and mtime
@@ -272,6 +272,8 @@ func (b *Builder) download(srcURL string) (fi builder.FileInfo, err error) {
272272
}
273273
}
274274

275+
tmpFile.Close()
276+
275277
if err = system.Chtimes(tmpFileName, mTime, mTime); err != nil {
276278
return
277279
}

‎builder/dockerfile/parser/dumper/main.go

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ func main() {
2121
if err != nil {
2222
panic(err)
2323
}
24+
defer f.Close()
2425

2526
d := parser.Directive{LookingForDirectives: true}
2627
parser.SetEscapeToken(parser.DefaultEscapeToken, &d)

‎builder/dockerfile/parser/parser_test.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,14 @@ func TestTestNegative(t *testing.T) {
3838
if err != nil {
3939
t.Fatalf("Dockerfile missing for %s: %v", dir, err)
4040
}
41+
defer df.Close()
4142

4243
d := Directive{LookingForDirectives: true}
4344
SetEscapeToken(DefaultEscapeToken, &d)
4445
_, err = Parse(df, &d)
4546
if err == nil {
4647
t.Fatalf("No error parsing broken dockerfile for %s", dir)
4748
}
48-
49-
df.Close()
5049
}
5150
}
5251

‎builder/dockerignore.go

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ func (c DockerIgnoreContext) Process(filesToRemove []string) error {
3636
return err
3737
}
3838
excludes, _ := dockerignore.ReadAll(f)
39+
f.Close()
3940
filesToRemove = append([]string{".dockerignore"}, filesToRemove...)
4041
for _, fileToRemove := range filesToRemove {
4142
rm, _ := fileutils.Matches(fileToRemove, excludes)

‎builder/dockerignore/dockerignore.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ import (
1212
// ReadAll reads a .dockerignore file and returns the list of file patterns
1313
// to ignore. Note this will trim whitespace from each line as well
1414
// as use GO's "clean" func to get the shortest/cleanest path for each.
15-
func ReadAll(reader io.ReadCloser) ([]string, error) {
15+
func ReadAll(reader io.Reader) ([]string, error) {
1616
if reader == nil {
1717
return nil, nil
1818
}
19-
defer reader.Close()
19+
2020
scanner := bufio.NewScanner(reader)
2121
var excludes []string
2222
currentLine := 0

‎builder/dockerignore/dockerignore_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ func TestReadAll(t *testing.T) {
3535
if err != nil {
3636
t.Fatal(err)
3737
}
38+
defer diFd.Close()
39+
3840
di, err = ReadAll(diFd)
3941
if err != nil {
4042
t.Fatal(err)

‎cliconfig/config_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,8 @@ func TestJsonSaveWithNoFile(t *testing.T) {
484484

485485
fn := filepath.Join(tmpHome, ConfigFileName)
486486
f, _ := os.OpenFile(fn, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
487+
defer f.Close()
488+
487489
err = config.SaveToWriter(f)
488490
if err != nil {
489491
t.Fatalf("Failed saving to file: %q", err)
@@ -522,6 +524,8 @@ func TestLegacyJsonSaveWithNoFile(t *testing.T) {
522524

523525
fn := filepath.Join(tmpHome, ConfigFileName)
524526
f, _ := os.OpenFile(fn, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
527+
defer f.Close()
528+
525529
if err = config.SaveToWriter(f); err != nil {
526530
t.Fatalf("Failed saving to file: %q", err)
527531
}

‎daemon/logger/jsonfilelog/read.go

+3
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ func (l *JSONFileLogger) readLogs(logWatcher *logger.LogWatcher, config logger.R
5555
}
5656
continue
5757
}
58+
defer f.Close()
59+
5860
files = append(files, f)
5961
}
6062

@@ -63,6 +65,7 @@ func (l *JSONFileLogger) readLogs(logWatcher *logger.LogWatcher, config logger.R
6365
logWatcher.Err <- err
6466
return
6567
}
68+
defer latestFile.Close()
6669

6770
if config.Tail != 0 {
6871
tailer := ioutils.MultiReadSeeker(append(files, latestFile)...)

‎image/tarexport/save.go

+12-10
Original file line numberDiff line numberDiff line change
@@ -174,17 +174,18 @@ func (s *saveSession) save(outStream io.Writer) error {
174174

175175
if len(reposLegacy) > 0 {
176176
reposFile := filepath.Join(tempDir, legacyRepositoriesFileName)
177-
f, err := os.OpenFile(reposFile, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
177+
rf, err := os.OpenFile(reposFile, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
178178
if err != nil {
179-
f.Close()
180179
return err
181180
}
182-
if err := json.NewEncoder(f).Encode(reposLegacy); err != nil {
183-
return err
184-
}
185-
if err := f.Close(); err != nil {
181+
182+
if err := json.NewEncoder(rf).Encode(reposLegacy); err != nil {
183+
rf.Close()
186184
return err
187185
}
186+
187+
rf.Close()
188+
188189
if err := system.Chtimes(reposFile, time.Unix(0, 0), time.Unix(0, 0)); err != nil {
189190
return err
190191
}
@@ -193,15 +194,16 @@ func (s *saveSession) save(outStream io.Writer) error {
193194
manifestFileName := filepath.Join(tempDir, manifestFileName)
194195
f, err := os.OpenFile(manifestFileName, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
195196
if err != nil {
196-
f.Close()
197197
return err
198198
}
199+
199200
if err := json.NewEncoder(f).Encode(manifest); err != nil {
201+
f.Close()
200202
return err
201203
}
202-
if err := f.Close(); err != nil {
203-
return err
204-
}
204+
205+
f.Close()
206+
205207
if err := system.Chtimes(manifestFileName, time.Unix(0, 0), time.Unix(0, 0)); err != nil {
206208
return err
207209
}

‎integration-cli/docker_cli_daemon_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -1151,6 +1151,8 @@ func (s *DockerDaemonSuite) TestDaemonLoggingDriverDefault(c *check.C) {
11511151
if err != nil {
11521152
c.Fatal(err)
11531153
}
1154+
defer f.Close()
1155+
11541156
var res struct {
11551157
Log string `json:"log"`
11561158
Stream string `json:"stream"`
@@ -1229,6 +1231,8 @@ func (s *DockerDaemonSuite) TestDaemonLoggingDriverNoneOverride(c *check.C) {
12291231
if err != nil {
12301232
c.Fatal(err)
12311233
}
1234+
defer f.Close()
1235+
12321236
var res struct {
12331237
Log string `json:"log"`
12341238
Stream string `json:"stream"`

‎integration-cli/docker_cli_push_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ func testPushEmptyLayer(c *check.C) {
131131

132132
freader, err := os.Open(emptyTarball.Name())
133133
c.Assert(err, check.IsNil, check.Commentf("Could not open test tarball"))
134+
defer freader.Close()
134135

135136
importCmd := exec.Command(dockerBinary, "import", "-", repoName)
136137
importCmd.Stdin = freader

‎integration-cli/docker_cli_save_load_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ func (s *DockerSuite) TestSaveDirectoryPermissions(c *check.C) {
283283

284284
f, err := os.Open(layerPath)
285285
c.Assert(err, checker.IsNil, check.Commentf("failed to open %s: %s", layerPath, err))
286+
defer f.Close()
286287

287288
entries, err := listTar(f)
288289
for _, e := range entries {

‎integration-cli/docker_cli_save_load_unix_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ func (s *DockerSuite) TestSaveAndLoadRepoStdout(c *check.C) {
3535

3636
tmpFile, err = os.Open(tmpFile.Name())
3737
c.Assert(err, check.IsNil)
38+
defer tmpFile.Close()
3839

3940
deleteImages(repoName)
4041

‎integration-cli/registry.go

+2
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ http:
7676
if err != nil {
7777
return nil, err
7878
}
79+
defer config.Close()
80+
7981
if _, err := fmt.Fprintf(config, template, tmp, privateRegistryURL, authTemplate); err != nil {
8082
os.RemoveAll(tmp)
8183
return nil, err

‎integration-cli/requirements.go

+1
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ var (
175175

176176
// We need extra check on redhat based distributions
177177
if f, err := os.Open("/sys/module/user_namespace/parameters/enable"); err == nil {
178+
defer f.Close()
178179
b := make([]byte, 1)
179180
_, _ = f.Read(b)
180181
if string(b) == "N" {

‎integration-cli/trust_server.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,10 @@ func newTestNotary(c *check.C) (*testNotary, error) {
6161
}
6262
confPath := filepath.Join(tmp, "config.json")
6363
config, err := os.Create(confPath)
64-
defer config.Close()
6564
if err != nil {
6665
return nil, err
6766
}
67+
defer config.Close()
6868

6969
workingDir, err := os.Getwd()
7070
if err != nil {
@@ -78,10 +78,11 @@ func newTestNotary(c *check.C) (*testNotary, error) {
7878
// generate client config
7979
clientConfPath := filepath.Join(tmp, "client-config.json")
8080
clientConfig, err := os.Create(clientConfPath)
81-
defer clientConfig.Close()
8281
if err != nil {
8382
return nil, err
8483
}
84+
defer clientConfig.Close()
85+
8586
template = `{
8687
"trust_dir" : "%s",
8788
"remote_server": {

‎layer/layer_test.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -741,18 +741,20 @@ func TestTarStreamVerification(t *testing.T) {
741741
if err != nil {
742742
t.Fatal(err)
743743
}
744+
defer src.Close()
744745

745746
dst, err := os.Create(filepath.Join(tmpdir, id2.Algorithm().String(), id2.Hex(), "tar-split.json.gz"))
746747
if err != nil {
747748
t.Fatal(err)
748749
}
750+
defer dst.Close()
749751

750752
if _, err := io.Copy(dst, src); err != nil {
751753
t.Fatal(err)
752754
}
753755

754-
src.Close()
755-
dst.Close()
756+
src.Sync()
757+
dst.Sync()
756758

757759
ts, err := layer2.TarStream()
758760
if err != nil {

‎libcontainerd/remote_linux.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -216,11 +216,11 @@ func (r *remote) Client(b Backend) (Client, error) {
216216

217217
func (r *remote) updateEventTimestamp(t time.Time) {
218218
f, err := os.OpenFile(r.eventTsPath, syscall.O_CREAT|syscall.O_WRONLY|syscall.O_TRUNC, 0600)
219-
defer f.Close()
220219
if err != nil {
221220
logrus.Warnf("libcontainerd: failed to open event timestamp file: %v", err)
222221
return
223222
}
223+
defer f.Close()
224224

225225
b, err := t.MarshalText()
226226
if err != nil {
@@ -245,11 +245,11 @@ func (r *remote) getLastEventTimestamp() time.Time {
245245
}
246246

247247
f, err := os.Open(r.eventTsPath)
248-
defer f.Close()
249248
if err != nil {
250249
logrus.Warnf("libcontainerd: Unable to access last event ts: %v", err)
251250
return t
252251
}
252+
defer f.Close()
253253

254254
b := make([]byte, fi.Size())
255255
n, err := f.Read(b)
@@ -329,10 +329,10 @@ func (r *remote) handleEventStream(events containerd.API_EventsClient) {
329329
func (r *remote) runContainerdDaemon() error {
330330
pidFilename := filepath.Join(r.stateDir, containerdPidFilename)
331331
f, err := os.OpenFile(pidFilename, os.O_RDWR|os.O_CREATE, 0600)
332-
defer f.Close()
333332
if err != nil {
334333
return err
335334
}
335+
defer f.Close()
336336

337337
// File exist, check if the daemon is alive
338338
b := make([]byte, 8)

‎pkg/archive/archive_test.go

+22
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ func TestDecompressStreamGzip(t *testing.T) {
101101
t.Fatalf("Fail to create an archive file for test : %s.", output)
102102
}
103103
archive, err := os.Open(tmp + "archive.gz")
104+
if err != nil {
105+
t.Fatalf("Fail to open file archive.gz")
106+
}
107+
defer archive.Close()
108+
104109
_, err = DecompressStream(archive)
105110
if err != nil {
106111
t.Fatalf("Failed to decompress a gzip file.")
@@ -114,6 +119,11 @@ func TestDecompressStreamBzip2(t *testing.T) {
114119
t.Fatalf("Fail to create an archive file for test : %s.", output)
115120
}
116121
archive, err := os.Open(tmp + "archive.bz2")
122+
if err != nil {
123+
t.Fatalf("Fail to open file archive.bz2")
124+
}
125+
defer archive.Close()
126+
117127
_, err = DecompressStream(archive)
118128
if err != nil {
119129
t.Fatalf("Failed to decompress a bzip2 file.")
@@ -130,6 +140,10 @@ func TestDecompressStreamXz(t *testing.T) {
130140
t.Fatalf("Fail to create an archive file for test : %s.", output)
131141
}
132142
archive, err := os.Open(tmp + "archive.xz")
143+
if err != nil {
144+
t.Fatalf("Fail to open file archive.xz")
145+
}
146+
defer archive.Close()
133147
_, err = DecompressStream(archive)
134148
if err != nil {
135149
t.Fatalf("Failed to decompress an xz file.")
@@ -141,6 +155,8 @@ func TestCompressStreamXzUnsuported(t *testing.T) {
141155
if err != nil {
142156
t.Fatalf("Fail to create the destination file")
143157
}
158+
defer dest.Close()
159+
144160
_, err = CompressStream(dest, Xz)
145161
if err == nil {
146162
t.Fatalf("Should fail as xz is unsupported for compression format.")
@@ -152,6 +168,8 @@ func TestCompressStreamBzip2Unsupported(t *testing.T) {
152168
if err != nil {
153169
t.Fatalf("Fail to create the destination file")
154170
}
171+
defer dest.Close()
172+
155173
_, err = CompressStream(dest, Xz)
156174
if err == nil {
157175
t.Fatalf("Should fail as xz is unsupported for compression format.")
@@ -163,6 +181,8 @@ func TestCompressStreamInvalid(t *testing.T) {
163181
if err != nil {
164182
t.Fatalf("Fail to create the destination file")
165183
}
184+
defer dest.Close()
185+
166186
_, err = CompressStream(dest, -1)
167187
if err == nil {
168188
t.Fatalf("Should fail as xz is unsupported for compression format.")
@@ -795,6 +815,8 @@ func TestUntarUstarGnuConflict(t *testing.T) {
795815
if err != nil {
796816
t.Fatal(err)
797817
}
818+
defer f.Close()
819+
798820
found := false
799821
tr := tar.NewReader(f)
800822
// Iterate through the files in the archive.

‎pkg/tarsum/builder_context_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ func TestTarSumRemoveNonExistent(t *testing.T) {
1414
if err != nil {
1515
t.Fatal(err)
1616
}
17+
defer reader.Close()
18+
1719
ts, err := NewTarSum(reader, false, Version0)
1820
if err != nil {
1921
t.Fatal(err)
@@ -42,6 +44,8 @@ func TestTarSumRemove(t *testing.T) {
4244
if err != nil {
4345
t.Fatal(err)
4446
}
47+
defer reader.Close()
48+
4549
ts, err := NewTarSum(reader, false, Version0)
4650
if err != nil {
4751
t.Fatal(err)

0 commit comments

Comments
 (0)
Please sign in to comment.