Fix cloned handlers to use same mutex #97
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Why this PR?
We experienced a race condition being detected in a test logging to a
bytes.Buffer
. Although the problem doesn't occur when logging toos.Stderr
, presumably because this is synchronized, it is reproducible when a logger uses a cloned handler.What has changed?
Based on https://github.com/golang/example/blob/8b405629c4a5215871be932097e099c05ec5cb2e/slog-handler-guide/README.md#concurrency-safety, synchronization in
handler
is changed to share a mutex among all clones, similar toslog.commonHandler
https://cs.opensource.google/go/go/+/refs/tags/go1.24.3:src/log/slog/handler.go;l=197.How is it tested?
An explicit test triggering a race condition is added:
TestClonedHandlersSynchronizeWriter
.How does it affect users?
There should be no effect on users.