diff --git a/internal/log/nonblocking_writer.go b/internal/log/nonblocking_writer.go index aa3fc633..50717ac8 100644 --- a/internal/log/nonblocking_writer.go +++ b/internal/log/nonblocking_writer.go @@ -54,8 +54,6 @@ func newNonBlockingWriter(writer io.Writer, queueSize int) *nonBlockingWriter { } func (w *nonBlockingWriter) Write(p []byte) (int, error) { - msg := bytes.Clone(p) - w.mu.RLock() defer w.mu.RUnlock() @@ -63,6 +61,8 @@ func (w *nonBlockingWriter) Write(p []byte) (int, error) { return 0, io.ErrClosedPipe } + msg := bytes.Clone(p) + select { case w.queue <- msg: default: diff --git a/internal/log/nonblocking_writer_test.go b/internal/log/nonblocking_writer_test.go index 83d951db..eebe3da1 100644 --- a/internal/log/nonblocking_writer_test.go +++ b/internal/log/nonblocking_writer_test.go @@ -111,6 +111,8 @@ func TestNonBlockingWriterDropsInsteadOfBlocking(t *testing.T) { require.Len(t, writes, 2) require.Equal(t, []byte("first"), writes[0]) require.Equal(t, []byte("second"), writes[1]) - require.NotEqual(t, []byte("third"), writes[0]) - require.NotEqual(t, []byte("third"), writes[1]) + + for _, write := range writes { + require.NotEqual(t, []byte("third"), write) + } }