This commit is contained in:
@@ -247,6 +247,7 @@ func newIndexSenderRegistry(conn protocol.Connection, closed chan struct{}, sup
|
||||
func (r *indexSenderRegistry) add(folder config.FolderConfiguration, fset *db.FileSet, startInfo *indexSenderStartInfo) {
|
||||
r.mut.Lock()
|
||||
r.addLocked(folder, fset, startInfo)
|
||||
l.Debugf("Started index sender for device %v and folder %v", r.deviceID.Short(), folder.ID)
|
||||
r.mut.Unlock()
|
||||
}
|
||||
|
||||
@@ -336,15 +337,17 @@ func (r *indexSenderRegistry) addLocked(folder config.FolderConfiguration, fset
|
||||
// addPending stores the given info to start an index sender once resume is called
|
||||
// for this folder.
|
||||
// If an index sender is already running, it will be stopped.
|
||||
func (r *indexSenderRegistry) addPending(folder config.FolderConfiguration, startInfo *indexSenderStartInfo) {
|
||||
func (r *indexSenderRegistry) addPending(folder string, startInfo *indexSenderStartInfo) {
|
||||
r.mut.Lock()
|
||||
defer r.mut.Unlock()
|
||||
|
||||
if is, ok := r.indexSenders[folder.ID]; ok {
|
||||
if is, ok := r.indexSenders[folder]; ok {
|
||||
r.sup.RemoveAndWait(is.token, 0)
|
||||
delete(r.indexSenders, folder.ID)
|
||||
delete(r.indexSenders, folder)
|
||||
l.Debugf("Removed index sender for device %v and folder %v due to added pending", r.deviceID.Short(), folder)
|
||||
}
|
||||
r.startInfos[folder.ID] = startInfo
|
||||
r.startInfos[folder] = startInfo
|
||||
l.Debugf("Pending index sender for device %v and folder %v", r.deviceID.Short(), folder)
|
||||
}
|
||||
|
||||
// remove stops a running index sender or removes one pending to be started.
|
||||
@@ -358,6 +361,7 @@ func (r *indexSenderRegistry) remove(folder string) {
|
||||
delete(r.indexSenders, folder)
|
||||
}
|
||||
delete(r.startInfos, folder)
|
||||
l.Debugf("Removed index sender for device %v and folder %v", r.deviceID.Short(), folder)
|
||||
}
|
||||
|
||||
// removeAllExcept stops all running index senders and removes those pending to be started,
|
||||
@@ -371,11 +375,13 @@ func (r *indexSenderRegistry) removeAllExcept(except map[string]struct{}) {
|
||||
if _, ok := except[folder]; !ok {
|
||||
r.sup.RemoveAndWait(is.token, 0)
|
||||
delete(r.indexSenders, folder)
|
||||
l.Debugf("Removed index sender for device %v and folder %v (removeAllExcept)", r.deviceID.Short(), folder)
|
||||
}
|
||||
}
|
||||
for folder := range r.startInfos {
|
||||
if _, ok := except[folder]; !ok {
|
||||
delete(r.startInfos, folder)
|
||||
l.Debugf("Removed pending index sender for device %v and folder %v (removeAllExcept)", r.deviceID.Short(), folder)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -388,6 +394,9 @@ func (r *indexSenderRegistry) pause(folder string) {
|
||||
|
||||
if is, ok := r.indexSenders[folder]; ok {
|
||||
is.pause()
|
||||
l.Debugf("Paused index sender for device %v and folder %v", r.deviceID.Short(), folder)
|
||||
} else {
|
||||
l.Debugf("No index sender for device %v and folder %v to pause", r.deviceID.Short(), folder)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -403,11 +412,16 @@ func (r *indexSenderRegistry) resume(folder config.FolderConfiguration, fset *db
|
||||
if isOk {
|
||||
r.sup.RemoveAndWait(is.token, 0)
|
||||
delete(r.indexSenders, folder.ID)
|
||||
l.Debugf("Removed index sender for device %v and folder %v in resume", r.deviceID.Short(), folder.ID)
|
||||
}
|
||||
r.addLocked(folder, fset, info)
|
||||
delete(r.startInfos, folder.ID)
|
||||
l.Debugf("Started index sender for device %v and folder %v in resume", r.deviceID.Short(), folder.ID)
|
||||
} else if isOk {
|
||||
is.resume(fset)
|
||||
l.Debugf("Resume index sender for device %v and folder %v", r.deviceID.Short(), folder.ID)
|
||||
} else {
|
||||
l.Debugf("Not resuming index sender for device %v and folder %v as none is paused and there is no start info", r.deviceID.Short(), folder.ID)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -1341,7 +1341,7 @@ func (m *model) ccHandleFolders(folders []protocol.Folder, deviceCfg config.Devi
|
||||
if err := m.db.AddOrUpdatePendingFolder(folder.ID, of, deviceID); err != nil {
|
||||
l.Warnf("Failed to persist pending folder entry to database: %v", err)
|
||||
}
|
||||
indexSenders.addPending(cfg, ccDeviceInfos[folder.ID])
|
||||
indexSenders.addPending(folder.ID, ccDeviceInfos[folder.ID])
|
||||
updatedPending = append(updatedPending, updatedPendingFolder{
|
||||
FolderID: folder.ID,
|
||||
FolderLabel: folder.Label,
|
||||
@@ -1365,7 +1365,7 @@ func (m *model) ccHandleFolders(folders []protocol.Folder, deviceCfg config.Devi
|
||||
}
|
||||
|
||||
if cfg.Paused {
|
||||
indexSenders.addPending(cfg, ccDeviceInfos[folder.ID])
|
||||
indexSenders.addPending(folder.ID, ccDeviceInfos[folder.ID])
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -1410,7 +1410,7 @@ func (m *model) ccHandleFolders(folders []protocol.Folder, deviceCfg config.Devi
|
||||
// Shouldn't happen because !cfg.Paused, but might happen
|
||||
// if the folder is about to be unpaused, but not yet.
|
||||
l.Debugln("ccH: no fset", folder.ID)
|
||||
indexSenders.addPending(cfg, ccDeviceInfos[folder.ID])
|
||||
indexSenders.addPending(folder.ID, ccDeviceInfos[folder.ID])
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user