From e5cc55ce096f67524a3ea3f4d450d1bae80a1555 Mon Sep 17 00:00:00 2001 From: Simon Frei Date: Thu, 14 May 2020 07:50:53 +0200 Subject: [PATCH] lib/model: Close conns when devices are removed (fixes #6564) (#6641) --- lib/model/model.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/model/model.go b/lib/model/model.go index 3167de7b5..45c0dad3b 100644 --- a/lib/model/model.go +++ b/lib/model/model.go @@ -164,6 +164,7 @@ var ( errDeviceUnknown = errors.New("unknown device") errDevicePaused = errors.New("device is paused") errDeviceIgnored = errors.New("device is ignored") + errDeviceRemoved = errors.New("device has been removed") ErrFolderPaused = errors.New("folder is paused") errFolderNotRunning = errors.New("folder is not running") errFolderMissing = errors.New("no such folder") @@ -2482,11 +2483,14 @@ func (m *model) CommitConfiguration(from, to config.Configuration) bool { m.evLogger.Log(events.DeviceResumed, map[string]string{"device": deviceID.String()}) } } + removedDevices := make([]protocol.DeviceID, 0, len(fromDevices)) m.fmut.Lock() for deviceID := range fromDevices { delete(m.deviceStatRefs, deviceID) + removedDevices = append(removedDevices, deviceID) } m.fmut.Unlock() + m.closeConns(removedDevices, errDeviceRemoved) m.globalRequestLimiter.setCapacity(1024 * to.Options.MaxConcurrentIncomingRequestKiB()) m.folderIOLimiter.setCapacity(to.Options.MaxFolderConcurrency())