Skip to content

Commit a590bca

Browse files
committed
fix: fix deadlock
1 parent 206f0c1 commit a590bca

File tree

2 files changed

+26
-10
lines changed

2 files changed

+26
-10
lines changed

fs.go

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,16 @@ import (
55
"path"
66
)
77

8+
func IsExist(f string) bool {
9+
_, err := os.Stat(f)
10+
return err == nil || os.IsExist(err)
11+
}
12+
813
func IsDir(f string) bool {
9-
s, _ := os.Stat(f)
14+
s, err := os.Stat(f)
15+
if err != nil {
16+
return false
17+
}
1018
return s.IsDir()
1119
}
1220

@@ -18,34 +26,42 @@ func RemoveAll(f string) error {
1826

1927
entrysLen := len(entrys)
2028

21-
chs := make(chan struct{}, entrysLen)
29+
signal := struct{}{}
2230
errChan := make(chan error)
31+
chs := make(chan struct{}, entrysLen)
2332

24-
for _, entry := range entrys {
33+
for i := 0; i < entrysLen; i++ {
2534
go func(entry os.DirEntry) {
2635
p := path.Join(f, entry.Name())
27-
if entry.IsDir() {
28-
err := RemoveAll(p)
36+
if !entry.IsDir() {
37+
err := os.Remove(p)
2938
if err != nil {
3039
errChan <- err
40+
return
3141
}
42+
chs <- signal
3243
return
3344
}
34-
err := os.Remove(p)
45+
err := RemoveAll(p)
3546
if err != nil {
3647
errChan <- err
3748
return
3849
}
39-
chs <- struct{}{}
40-
}(entry)
50+
chs <- signal
51+
}(entrys[i])
4152
}
4253

4354
for i := 0; i < entrysLen; i++ {
4455
select {
56+
case <-chs:
57+
continue
4558
case nestedErr := <-errChan:
4659
return nestedErr
47-
case <-chs:
4860
}
4961
}
62+
rootErr := os.Remove(f)
63+
if rootErr != nil {
64+
return rootErr
65+
}
5066
return nil
5167
}

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func main() {
2727
cache_dirs := []string{".nuxt", "cache", ".cache", "@cache", "temp", ".temp", "@temp"}
2828

2929
for _, v := range cache_dirs {
30-
if !IsDir(v) {
30+
if !IsExist(v) || !IsDir(v) {
3131
continue
3232
}
3333
err := RemoveAll(v)

0 commit comments

Comments
 (0)