fix(fs): deadlock when get link error (#963)

This commit is contained in:
j2rong4cn
2025-08-02 17:49:53 +08:00
committed by GitHub
parent 58dbf088f9
commit 6b096bcad4
2 changed files with 2 additions and 2 deletions

View File

@ -295,7 +295,6 @@ func Link(ctx context.Context, storage driver.Driver, path string, args model.Li
fn := func() (*model.Link, error) {
link, err := storage.Link(ctx, file, args)
if err != nil {
linkG.Forget(key)
return nil, errors.Wrapf(err, "failed get link")
}
if link.Expiration != nil {

View File

@ -74,6 +74,7 @@ type Group[T any] struct {
mu sync.Mutex // protects m
m map[string]*call[T] // lazily initialized
// Won't remember error
Remember bool
}
@ -158,7 +159,7 @@ func (g *Group[T]) doCall(c *call[T], key string, fn func() (T, error)) {
g.mu.Lock()
defer g.mu.Unlock()
c.wg.Done()
if !g.Remember && g.m[key] == c {
if (!g.Remember || c.err != nil) && g.m[key] == c {
delete(g.m, key)
}