Package: syncthing Version: 1.12.1~ds1-2 Severity: important Accepting a new folder can lead to missing files on initial sync. See upstream bug [1] and PR for details. This can lead to an inconsistent state, with files not being synced, thus I used severity important.
The patch fixing this is attached. [1]: https://github.com/syncthing/syncthing/issues/7649
diff --git a/lib/model/indexsender.go b/lib/model/indexsender.go index 7bca774..8b9e02a 100644 --- a/lib/model/indexsender.go +++ b/lib/model/indexsender.go @@ -329,15 +329,15 @@ 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(folderID string, startInfo *indexSenderStartInfo) { r.mut.Lock() defer r.mut.Unlock() - if is, ok := r.indexSenders[folder.ID]; ok { + if is, ok := r.indexSenders[folderID]; ok { r.sup.RemoveAndWait(is.token, 0) - delete(r.indexSenders, folder.ID) + delete(r.indexSenders, folderID) } - r.startInfos[folder.ID] = startInfo + r.startInfos[folderID] = startInfo } // remove stops a running index sender or removes one pending to be started. diff --git a/lib/model/model.go b/lib/model/model.go index 64e7bc6..1558321 100644 --- a/lib/model/model.go +++ b/lib/model/model.go @@ -1252,7 +1252,7 @@ func (m *model) ccHandleFolders(folders []protocol.Folder, deviceCfg config.Devi continue } m.cfg.AddOrUpdatePendingFolder(folder.ID, folder.Label, deviceID) - indexSenders.addPending(cfg, ccDeviceInfos[folder.ID]) + indexSenders.addPending(folder.ID, ccDeviceInfos[folder.ID]) changed = true m.evLogger.Log(events.FolderRejected, map[string]string{ "folder": folder.ID, @@ -1270,7 +1270,7 @@ func (m *model) ccHandleFolders(folders []protocol.Folder, deviceCfg config.Devi } if cfg.Paused { - indexSenders.addPending(cfg, ccDeviceInfos[folder.ID]) + indexSenders.addPending(cfg.ID, ccDeviceInfos[folder.ID]) continue } @@ -1312,7 +1312,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(cfg.ID, ccDeviceInfos[folder.ID]) continue }
OpenPGP_signature
Description: OpenPGP digital signature