Skip to content

Commit 6b096bc

Browse files
authored
fix(fs): deadlock when get link error (#963)
1 parent 58dbf08 commit 6b096bc

File tree

2 files changed

+2
-2
lines changed

2 files changed

+2
-2
lines changed

internal/op/fs.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,6 @@ func Link(ctx context.Context, storage driver.Driver, path string, args model.Li
295295
fn := func() (*model.Link, error) {
296296
link, err := storage.Link(ctx, file, args)
297297
if err != nil {
298-
linkG.Forget(key)
299298
return nil, errors.Wrapf(err, "failed get link")
300299
}
301300
if link.Expiration != nil {

pkg/singleflight/singleflight.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ type Group[T any] struct {
7474
mu sync.Mutex // protects m
7575
m map[string]*call[T] // lazily initialized
7676

77+
// Won't remember error
7778
Remember bool
7879
}
7980

@@ -158,7 +159,7 @@ func (g *Group[T]) doCall(c *call[T], key string, fn func() (T, error)) {
158159
g.mu.Lock()
159160
defer g.mu.Unlock()
160161
c.wg.Done()
161-
if !g.Remember && g.m[key] == c {
162+
if (!g.Remember || c.err != nil) && g.m[key] == c {
162163
delete(g.m, key)
163164
}
164165

0 commit comments

Comments
 (0)