fixed preload finish deadlock

This commit is contained in:
ston1th 2022-08-19 16:00:54 +02:00
commit cd0b0254c7

View file

@ -34,10 +34,10 @@ func (q *queue) Add(ph *PreloadHandler, name string, prio int) {
q.Sort() q.Sort()
} }
func (q *queue) Remove(name string) { func (q *queue) Remove(name string, collect bool) {
for i, p := range *q { for i, p := range *q {
if p.Name == name { if p.Name == name {
p.stop(true) p.stop(collect)
*q = slices.Delete(*q, i, i+1) *q = slices.Delete(*q, i, i+1)
q.Sort() q.Sort()
return return
@ -100,7 +100,7 @@ func NewPreloadHandler(ctx context.Context, fs *FS, max int, log logr.Logger) (p
func (ph *PreloadHandler) RemovePreload(name string) { func (ph *PreloadHandler) RemovePreload(name string) {
ph.mu.RLock() ph.mu.RLock()
defer ph.mu.RUnlock() defer ph.mu.RUnlock()
ph.q.Remove(name) ph.q.Remove(name, true)
ph.schedule() ph.schedule()
} }
@ -184,7 +184,7 @@ func (ph *PreloadHandler) preloadStatus(ctx context.Context) {
return return
case name := <-ph.fin: case name := <-ph.fin:
ph.mu.Lock() ph.mu.Lock()
ph.q.Remove(name) ph.q.Remove(name, false)
ph.schedule() ph.schedule()
ph.mu.Unlock() ph.mu.Unlock()
case name := <-ph.err: case name := <-ph.err: