From 21732d319a2dfd061d798f3e5bfa6fdacc28be38 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Wed, 11 Mar 2026 10:24:30 -0400 Subject: lay/strain: replace Solver mutex with channels Partially reverts 483236742ddcd7883b5f9cff92244129274aa79c. Solver still closes itself automatically, but reverted to using request/reply channels. Mutex was becoming annoying to manage, as expected. TODO: TestRows fails intermittently due to constraint channels not being flushed when Solve() is called. --- internal/tag/tag.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'internal') diff --git a/internal/tag/tag.go b/internal/tag/tag.go index 197d2d6..b4b627d 100644 --- a/internal/tag/tag.go +++ b/internal/tag/tag.go @@ -1,12 +1,22 @@ package tag +import "context" + type Tagged[V, T any] struct { Val V Tag T } -func Tag[V, T any](out chan<- Tagged[V, T], in <-chan V, f func(V) T) { - for val := range in { - out <- Tagged[V, T]{val, f(val)} +func Tag[V, T any](ctx context.Context, out chan<- Tagged[V, T], in <-chan V, f func(V) T) { + for { + select { + case val, ok := <-in: + if !ok { + return + } + out <- Tagged[V, T]{val, f(val)} + case <-ctx.Done(): + return + } } } -- cgit v1.2.3