From bf70f07419c0f86040dfd53a84b7e997823e2d93 Mon Sep 17 00:00:00 2001 From: Denis Galeev Date: Sun, 24 Aug 2025 21:04:37 +0300 Subject: [PATCH] fix recorder: writes order --- recorder/file.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/recorder/file.go b/recorder/file.go index 37a860bc..9b03a7ed 100644 --- a/recorder/file.go +++ b/recorder/file.go @@ -3,6 +3,7 @@ package recorder import ( "context" "io" + "sync" "github.com/go-gost/core/metrics" "github.com/go-gost/core/recorder" @@ -32,6 +33,8 @@ type fileRecorder struct { recorder string out io.WriteCloser sep string + + mu sync.Mutex } // FileRecorder records data to file. @@ -51,6 +54,11 @@ func FileRecorder(out io.WriteCloser, opts ...FileRecorderOption) recorder.Recor func (r *fileRecorder) Record(ctx context.Context, b []byte, opts ...recorder.RecordOption) error { xmetrics.GetCounter(xmetrics.MetricRecorderRecordsCounter, metrics.Labels{"recorder": r.recorder}).Inc() + if r.sep != "" { + r.mu.Lock() // mutex is used to prevent unordered writes to the file + defer r.mu.Unlock() + } + if _, err := r.out.Write(b); err != nil { return err }