diff --git a/discovery/sync_manager.go b/discovery/sync_manager.go
index <HASH>..<HASH> 100644
--- a/discovery/sync_manager.go
+++ b/discovery/sync_manager.go
@@ -353,19 +353,20 @@ func (m *SyncManager) roundRobinHandler() {
 			// the set of inactive syncers.
 			if staleActiveSyncer.transitioned {
 				m.inactiveSyncers[s.cfg.peerPub] = s
+			} else {
+				// Otherwise, since the peer is disconnecting,
+				// we'll attempt to find a passive syncer that
+				// can replace it.
+				newActiveSyncer := m.chooseRandomSyncer(nil, false)
+				if newActiveSyncer != nil {
+					m.queueActiveSyncer(newActiveSyncer)
+				}
 			}
 
 			// Remove the internal active syncer references for this
 			// peer.
 			delete(m.pendingActiveSyncers, s.cfg.peerPub)
 			delete(m.activeSyncers, s.cfg.peerPub)
-
-			// We'll then attempt to find a passive syncer that can
-			// replace the stale active syncer.
-			newActiveSyncer := m.chooseRandomSyncer(nil, false)
-			if newActiveSyncer != nil {
-				m.queueActiveSyncer(newActiveSyncer)
-			}
 			m.Unlock()
 
 			// Signal to the caller that they can now proceed since
discovery: only replace stale active syncer if disconnected

In this commit, we address a bug where we'd attempt to replace the
stale active syncer when it transitioned to a passive syncer. This
replacement logic is only intended to happen when the active syncer
disconnects, as rotateActiveSyncerCandidate chooses and queues its own
replacement.