Browse Source

lib/model: Prevent infinite index sending loop (fixes #9407) (#9458)

Explanation of what/why in a code comment.

Fixes https://github.com/syncthing/syncthing/issues/9407
Simon Frei 1 year ago
parent
commit
73cc5553b6
1 changed files with 6 additions and 5 deletions
  1. 6 5
      lib/model/indexhandler.go

+ 6 - 5
lib/model/indexhandler.go

@@ -295,12 +295,13 @@ func (s *indexHandler) sendIndexTo(ctx context.Context, fset *db.FileSet) error
 
 	err = batch.Flush()
 
-	// True if there was nothing to be sent
-	if f.Sequence == 0 {
-		return err
-	}
+	// Use the sequence of the snapshot we iterated as a starting point for the
+	// next run. Previously we used the sequence of the last file we sent,
+	// however it's possible that a higher sequence exists, just doesn't need to
+	// be sent (e.g. in a receive-only folder, when a local change was
+	// reverted). No point trying to send nothing again.
+	s.prevSequence = snap.Sequence(protocol.LocalDeviceID)
 
-	s.prevSequence = f.Sequence
 	return err
 }