syncthing/lib
greatroar 8265dac127
lib/nat: Fix race condition in Mapping (#8042)
The locking protocol in nat.Mapping was racy:

* Mapping.addressMap RLock'd, but then returned a map shared between
  caller and Mapping, so the lock didn't do anything.

* Operations inside Service.{verifyExistingMappings,acquireNewMappings}
  would lock the map for every update, but that means callers to
  Mapping.ExternalAddresses can be looping over the map while the
  Service methods are concurrently modifying it. When the Go runtime
  detects that happening, it panics.

* Mapping.expires was read and updated without locking.

The Service methods now lock the map once and release the lock only when
done.

Also, subscribers no longer get the added and removed addresses, because
none of them were using the information. This was changed for a previous
attempt to retain the fine-grained locking and not reverted because it
simplifies the code.
2021-11-22 08:29:44 +01:00
..
api lib/config: Move the bcrypt password hashing to GUIConfiguration (#8028) 2021-11-08 13:32:04 +01:00
assets lib/assets: Allow assets to remain uncompressed (#6661) 2020-05-25 08:51:27 +02:00
beacon all: Unused args, retvals, assignments (#7926) 2021-09-08 00:11:16 +02:00
build all: Update build constraints to Go 1.17 style (#7894) 2021-08-17 10:10:41 +02:00
config lib/config: Move the bcrypt password hashing to GUIConfiguration (#8028) 2021-11-08 13:32:04 +01:00
connections lib/nat: Fix race condition in Mapping (#8042) 2021-11-22 08:29:44 +01:00
db gui, lib: Fix tracking deleted locally-changed on encrypted (fixes #7715) (#7726) 2021-11-10 09:46:21 +01:00
dialer lib/connections: Fix and optimize registry (#7996) 2021-10-06 10:52:51 +02:00
discover lib/syncthing: Clean up / refactor LoadOrGenerateCertificate() utility function. (#8025) 2021-11-07 23:59:48 +01:00
events build: List go:generate tools in tools.go (#7599) 2021-05-08 12:52:06 +02:00
fs lib/model: Correct handling of fakefs cache 2021-11-17 12:52:10 +01:00
ignore all: Unused args, retvals, assignments (#7926) 2021-09-08 00:11:16 +02:00
locations Normalize CLI options to always use two dashes. (#8037) 2021-11-04 08:42:55 +01:00
logger build: List go:generate tools in tools.go (#7599) 2021-05-08 12:52:06 +02:00
model lib/model: Correct "reverting folder" log entry 2021-11-17 12:52:10 +01:00
nat lib/nat: Fix race condition in Mapping (#8042) 2021-11-22 08:29:44 +01:00
osutil all: Update build constraints to Go 1.17 style (#7894) 2021-08-17 10:10:41 +02:00
pmp lib/nat: Make service termination faster (#6777) 2020-06-22 09:01:57 +01:00
protocol lib/protocol: Simplify codeToError, errorToCode 2021-10-22 18:40:40 +02:00
rand lib/rand: Optimizations (#7964) 2021-09-26 12:15:39 +02:00
rc test, lib/model: Various integration test updates & improvements (#6956) 2020-09-07 09:35:37 +02:00
relay lib/relay/protocol: Merge two Sprintf calls 2021-09-06 15:30:56 +02:00
scanner lib/fs: Ignore normalization differences in case insensitive lookup (fixes #7677) (#7678) 2021-05-17 12:35:03 +02:00
sha256 all: Use crypt/rand through its buffered version, but not in benchmarks (#7420) 2021-03-02 19:17:20 +01:00
signature all: Use crypt/rand through its buffered version, but not in benchmarks (#7420) 2021-03-02 19:17:20 +01:00
stats all: Truncate some timestamps (fixes #7457) (#7459) 2021-03-12 10:35:10 +01:00
stun lib/stun: Prevent nil deref when naming service (#7872) 2021-08-05 00:04:22 +01:00
svcutil lib/relay, lib/svcutil: Improve service logging (fixes #7580) (#7647) 2021-05-10 22:26:25 +02:00
sync lib/sync: Cleanly fail instead of panic in tests (#6088) 2019-10-16 10:11:11 +02:00
syncthing cmd/syncthing: Implement generate as a subcommand with optional API credential setting (fixes #8021) (#8043) 2021-11-18 22:57:59 +01:00
testutils lib: Use counterfeiter to mock interfaces in tests (#7375) 2021-03-03 08:53:50 +01:00
tlsutil lib/syncthing: Clean up / refactor LoadOrGenerateCertificate() utility function. (#8025) 2021-11-07 23:59:48 +01:00
upgrade all: Update build constraints to Go 1.17 style (#7894) 2021-08-17 10:10:41 +02:00
upnp all: Simplify some method calls (#7499) 2021-03-17 23:12:26 +01:00
ur lib/ur: Fix panic build goroutines for failures (#7903) 2021-08-25 07:16:55 +02:00
util lib/connections: Fix and optimize registry (#7996) 2021-10-06 10:52:51 +02:00
versioner all: Simplify some method calls (#7499) 2021-03-17 23:12:26 +01:00
watchaggregator lib/watchaggregator: Replace counter map by two integers (#7856) 2021-08-01 12:30:20 +02:00
weakhash lib/weakhash: Fix speed reporting in benchmark (#6470) 2020-03-29 17:07:25 +02:00