lib/model: Missing queue.Done and reset between pulls (fixes #5332) (#5626)

This commit is contained in:
Simon Frei 2019-03-27 20:19:35 +01:00 committed by Jakob Borg
parent 0cff66fcbc
commit 8d1eff7e41
2 changed files with 11 additions and 0 deletions

View File

@ -291,6 +291,8 @@ func (f *sendReceiveFolder) pullerIteration(scanChan chan<- string) int {
}
func (f *sendReceiveFolder) processNeeded(dbUpdateChan chan<- dbUpdateJob, copyChan chan<- copyBlocksState, scanChan chan<- string) (int, map[string]protocol.FileInfo, []protocol.FileInfo, error) {
defer f.queue.Reset()
changed := 0
var dirDeletions []protocol.FileInfo
fileDeletions := map[string]protocol.FileInfo{}
@ -464,6 +466,7 @@ nextFile:
// Remove the pending deletion (as we performed it by renaming)
delete(fileDeletions, candidate.Name)
changed++
f.queue.Done(fileName)
continue nextFile
}
@ -479,6 +482,7 @@ nextFile:
}
}
f.newPullError(fileName, errNotAvailable)
f.queue.Done(fileName)
}
return changed, fileDeletions, dirDeletions, nil

View File

@ -110,6 +110,13 @@ func (q *jobQueue) Shuffle() {
}
}
func (q *jobQueue) Reset() {
q.mut.Lock()
defer q.mut.Unlock()
q.progress = nil
q.queued = nil
}
func (q *jobQueue) lenQueued() int {
q.mut.Lock()
defer q.mut.Unlock()