syncthing/lib/model
Simon Frei a28de73031
lib/model: Remove runner during folder cleanup (fixes #9269) (#9271)
Before introducing the service map and using it for folder runners, the
entries in folderCfgs and folderRunners for the same key/folder were
removed under a single lock. Stopping the folder happens separately
before that with just the read lock. Now with the service map stopping
the folder and removing it from the map is a single operation. And that
still happens with just a read-lock. However even with a full lock it’s
still problematic: After the folder stopped, the runner isn’t present
anymore while the folder-config still is and sais the folder isn't
paused.

The index handler in turn looks at the folder config that is not paused,
thus assumes the runner has to be present -> nil deref on the runner.

A better solution might be to push most of these fmut maps into the
folder - they anyway are needed in there. Then there's just a single
map/source of info that's necessarily consistent. That's quite a bit of
work though, and probably/likely there will be corner cases there too.
2023-12-08 07:13:09 +01:00
..
mocks all: Support multiple device connections (fixes #141) (#8918) 2023-09-06 12:52:01 +02:00
testdata all: Grand test refactor (fixes #8779, fixes #8799) 2023-05-09 10:01:57 +00:00
blockpullreorderer.go lib/model: Add support for different puller block ordering (#6587) 2020-05-11 22:44:04 +01:00
blockpullreorderer_test.go all: Remove miscellaneous vestigial code (#7495) 2021-03-17 22:23:12 +01:00
debug.go all, lib/logger: Refactor SetDebug calls (#6054) 2019-10-04 13:03:34 +02:00
deviceactivity.go lib/model: Return index from deviceActivity.leastBusy 2021-11-26 12:07:43 +01:00
deviceactivity_test.go lib/model: Return index from deviceActivity.leastBusy 2021-11-26 12:07:43 +01:00
devicedownloadstate.go all: Move remaining protos to use the vanity plugin (#7009) 2020-10-02 08:07:05 +02:00
devicedownloadstate_test.go all: Move remaining protos to use the vanity plugin (#7009) 2020-10-02 08:07:05 +02:00
doc.go all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
fakeconns_test.go all: Support multiple device connections (fixes #141) (#8918) 2023-09-06 12:52:01 +02:00
folder.go all: Remove lib/util package (#9049) 2023-08-21 19:44:33 +02:00
folder_recvenc.go all: Remove lib/util package (#9049) 2023-08-21 19:44:33 +02:00
folder_recvonly.go all: Remove lib/util package (#9049) 2023-08-21 19:44:33 +02:00
folder_recvonly_test.go all: Support multiple device connections (fixes #141) (#8918) 2023-09-06 12:52:01 +02:00
folder_sendonly.go all: Remove lib/util package (#9049) 2023-08-21 19:44:33 +02:00
folder_sendrecv.go all: Support multiple device connections (fixes #141) (#8918) 2023-09-06 12:52:01 +02:00
folder_sendrecv_test.go lib/model: Refactor folderRunners to use a serviceMap (#9071) 2023-09-02 16:42:46 +02:00
folder_sendrecv_unix.go all: Support syncing ownership (fixes #1329) (#8434) 2022-07-26 08:24:58 +02:00
folder_sendrecv_windows.go all: Support syncing ownership (fixes #1329) (#8434) 2022-07-26 08:24:58 +02:00
folder_summary.go all: Add Prometheus-style metrics to expose some internal performance counters (fixes #5175) (#9003) 2023-08-04 19:57:30 +02:00
folder_test.go all: Grand test refactor (fixes #8779, fixes #8799) 2023-05-09 10:01:57 +00:00
folderstate.go all: Add Prometheus-style metrics to expose some internal performance counters (fixes #5175) (#9003) 2023-08-04 19:57:30 +02:00
indexhandler.go lib/model: Refactor folderRunners to use a serviceMap (#9071) 2023-09-02 16:42:46 +02:00
metrics.go all: Add Prometheus-style metrics to expose some internal performance counters (fixes #5175) (#9003) 2023-08-04 19:57:30 +02:00
model.go lib/model: Remove runner during folder cleanup (fixes #9269) (#9271) 2023-12-08 07:13:09 +01:00
model_test.go all: Support multiple device connections (fixes #141) (#8918) 2023-09-06 12:52:01 +02:00
progressemitter.go all: Refactor the protocol/model interface a bit (ref #8981) (#9007) 2023-07-29 10:24:44 +02:00
progressemitter_test.go all: Add Prometheus-style metrics to expose some internal performance counters (fixes #5175) (#9003) 2023-08-04 19:57:30 +02:00
queue.go lib/model: Optimize jobQueue performance and memory use (#8023) 2021-10-29 20:20:46 +02:00
queue_test.go all: Remove lib/util package (#9049) 2023-08-21 19:44:33 +02:00
requests_test.go all: Support multiple device connections (fixes #141) (#8918) 2023-09-06 12:52:01 +02:00
sentdownloadstate.go all: Fix various user-facing and non-user-facing typos (#8509) 2022-08-23 15:44:11 +02:00
service_map.go lib/model: Remove runner during folder cleanup (fixes #9269) (#9271) 2023-12-08 07:13:09 +01:00
service_map_test.go lib/model: Refactor folderRunners to use a serviceMap (#9071) 2023-09-02 16:42:46 +02:00
sharedpullerstate.go all: Add Prometheus-style metrics to expose some internal performance counters (fixes #5175) (#9003) 2023-08-04 19:57:30 +02:00
sharedpullerstate_test.go all: Grand test refactor (fixes #8779, fixes #8799) 2023-05-09 10:01:57 +00:00
testos_test.go all: Grand test refactor (fixes #8779, fixes #8799) 2023-05-09 10:01:57 +00:00
testutils_test.go all: Support multiple device connections (fixes #141) (#8918) 2023-09-06 12:52:01 +02:00
util.go lib/fs, lib/model: Be careful about potentially negative durations (fixes #9112) (#9113) 2023-09-20 09:04:47 +02:00
utils_test.go all: Grand test refactor (fixes #8779, fixes #8799) 2023-05-09 10:01:57 +00:00