mirror of
https://github.com/OpenListTeam/OpenList.git
synced 2025-09-19 04:06:18 +08:00
fix(fs): deadlock when get link error (#963)
This commit is contained in:
@ -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 {
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user