Skip to content

Commit 9280b9f

Browse files
committed
refactor(archive): close processing file as soon as possible
1 parent 81e5019 commit 9280b9f

File tree

1 file changed

+35
-28
lines changed

1 file changed

+35
-28
lines changed

src/serverHandler/archive.go

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,46 @@ func (h *handler) visitFs(
2626
fsPath = initFsPath
2727
}
2828

29-
f, err := os.Open(fsPath)
30-
if f != nil {
31-
defer f.Close()
32-
}
33-
h.errHandler.LogError(err)
34-
3529
var fInfo os.FileInfo
36-
if err != nil {
37-
if os.IsExist(err) {
38-
return
30+
var childInfos []os.FileInfo
31+
32+
err := func() error {
33+
f, err := os.Open(fsPath)
34+
if f != nil {
35+
defer f.Close()
3936
}
40-
fInfo = newFakeFileInfo(path.Base(fsPath), true)
41-
} else {
42-
fInfo, err = f.Stat()
43-
if h.errHandler.LogError(err) {
44-
return
37+
h.errHandler.LogError(err)
38+
39+
if err != nil {
40+
if os.IsExist(err) {
41+
return err
42+
}
43+
fInfo = newFakeFileInfo(path.Base(fsPath), true) // prefix path for alias
44+
} else {
45+
fInfo, err = f.Stat()
46+
if h.errHandler.LogError(err) {
47+
return err
48+
}
4549
}
46-
}
4750

48-
if len(relPath) > 0 {
49-
if archiveCallback(f, fInfo, relPath) != nil {
50-
return
51+
if len(relPath) > 0 {
52+
if err := archiveCallback(f, fInfo, relPath); err != nil {
53+
return err
54+
}
5155
}
56+
57+
if f != nil && fInfo.IsDir() {
58+
childInfos, err = f.Readdir(0)
59+
if h.errHandler.LogError(err) {
60+
return err
61+
}
62+
childInfos = filterCallback(childInfos)
63+
}
64+
65+
return nil
66+
}()
67+
if err != nil {
68+
return
5269
}
5370

5471
if fInfo.IsDir() {
@@ -72,15 +89,6 @@ func (h *handler) visitFs(
7289
}
7390
}
7491

75-
var childInfos []os.FileInfo
76-
if f != nil {
77-
childInfos, err = f.Readdir(0)
78-
if h.errHandler.LogError(err) {
79-
return
80-
}
81-
childInfos = filterCallback(childInfos)
82-
}
83-
8492
for _, childInfo := range childInfos {
8593
childPath := "/" + childInfo.Name()
8694
childFsPath := fsPath + childPath
@@ -99,7 +107,6 @@ func (h *handler) visitFs(
99107
childRelPath := relPath + "/" + path.Base(childRawRequestPath)
100108
h.visitFs(childAliasedFsPath, childRawRequestPath, childRelPath, filterCallback, archiveCallback)
101109
}
102-
103110
}
104111
}
105112

0 commit comments

Comments
 (0)