headscale/hscontrol/mapper
Kristoffer Dalby 57070680a5 mapper/batcher: restructure internals for correctness
Move per-node pending changes from a shared xsync.Map on the batcher
into multiChannelNodeConn, protected by a dedicated mutex. The new
appendPending/drainPending methods provide atomic append and drain
operations, eliminating data races in addToBatch and
processBatchedChanges.

Add sync.Once to multiChannelNodeConn.close() to make it idempotent,
preventing panics from concurrent close calls on the same channel.

Add started atomic.Bool to guard Start() against being called
multiple times, preventing orphaned goroutines.

Add comprehensive concurrency tests validating these changes.
2026-03-14 02:52:28 -07:00
..
batcher.go mapper/batcher: restructure internals for correctness 2026-03-14 02:52:28 -07:00
batcher_bench_test.go mapper/batcher: restructure internals for correctness 2026-03-14 02:52:28 -07:00
batcher_concurrency_test.go mapper/batcher: restructure internals for correctness 2026-03-14 02:52:28 -07:00
batcher_lockfree.go mapper/batcher: restructure internals for correctness 2026-03-14 02:52:28 -07:00
batcher_test.go mapper/batcher: restructure internals for correctness 2026-03-14 02:52:28 -07:00
batcher_unit_test.go mapper/batcher: add unit tests and benchmarks 2026-03-14 02:52:28 -07:00
builder.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
builder_test.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
mapper.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
mapper_test.go all: upgrade to Go 1.26rc2 and modernize codebase 2026-02-08 12:35:23 +01:00
tail_test.go all: upgrade to Go 1.26rc2 and modernize codebase 2026-02-08 12:35:23 +01:00