Avoid deadlock during initial scan (fixes #389)
This commit is contained in:
@@ -454,19 +454,6 @@ func (m *Model) ReplaceLocal(repo string, fs []scanner.File) {
|
|||||||
m.rmut.RUnlock()
|
m.rmut.RUnlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Model) SeedLocal(repo string, fs []protocol.FileInfo) {
|
|
||||||
var sfs = make([]scanner.File, len(fs))
|
|
||||||
for i := 0; i < len(fs); i++ {
|
|
||||||
lamport.Default.Tick(fs[i].Version)
|
|
||||||
sfs[i] = fileFromFileInfo(fs[i])
|
|
||||||
sfs[i].Suppressed = false // we might have saved an index with files that were suppressed; the should not be on startup
|
|
||||||
}
|
|
||||||
|
|
||||||
m.rmut.RLock()
|
|
||||||
m.repoFiles[repo].Replace(cid.LocalID, sfs)
|
|
||||||
m.rmut.RUnlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Model) CurrentRepoFile(repo string, file string) scanner.File {
|
func (m *Model) CurrentRepoFile(repo string, file string) scanner.File {
|
||||||
m.rmut.RLock()
|
m.rmut.RLock()
|
||||||
f := m.repoFiles[repo].Get(cid.LocalID, file)
|
f := m.repoFiles[repo].Get(cid.LocalID, file)
|
||||||
@@ -736,7 +723,15 @@ func (m *Model) LoadIndexes(dir string) {
|
|||||||
m.rmut.RLock()
|
m.rmut.RLock()
|
||||||
for repo := range m.repoCfgs {
|
for repo := range m.repoCfgs {
|
||||||
fs := m.loadIndex(repo, dir)
|
fs := m.loadIndex(repo, dir)
|
||||||
m.SeedLocal(repo, fs)
|
|
||||||
|
var sfs = make([]scanner.File, len(fs))
|
||||||
|
for i := 0; i < len(fs); i++ {
|
||||||
|
lamport.Default.Tick(fs[i].Version)
|
||||||
|
sfs[i] = fileFromFileInfo(fs[i])
|
||||||
|
sfs[i].Suppressed = false // we might have saved an index with files that were suppressed; the should not be on startup
|
||||||
|
}
|
||||||
|
|
||||||
|
m.repoFiles[repo].Replace(cid.LocalID, sfs)
|
||||||
}
|
}
|
||||||
m.rmut.RUnlock()
|
m.rmut.RUnlock()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user