From 3bf28ef6ce0b260d408d62178cab8adea783c5a2 Mon Sep 17 00:00:00 2001 From: rs Date: Fri, 7 May 2021 16:57:40 +0500 Subject: [PATCH] fix(codec): full codec fix race condition --- internal/proto/codec/full.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/internal/proto/codec/full.go b/internal/proto/codec/full.go index 43bbd46637..e0bfc0621a 100644 --- a/internal/proto/codec/full.go +++ b/internal/proto/codec/full.go @@ -36,23 +36,19 @@ func (i *Full) Write(w io.Writer, b *bin.Buffer) error { return err } - if err := writeFull(w, int(atomic.LoadInt64(&i.wSeqNo)), b); err != nil { + if err := writeFull(w, int(atomic.AddInt64(&i.wSeqNo, 1)-1), b); err != nil { return xerrors.Errorf("write full: %w", err) } - atomic.AddInt64(&i.wSeqNo, 1) - return nil } // Read fills buffer with received message. func (i *Full) Read(r io.Reader, b *bin.Buffer) error { - if err := readFull(r, int(atomic.LoadInt64(&i.rSeqNo)), b); err != nil { + if err := readFull(r, int(atomic.AddInt64(&i.rSeqNo, 1)-1), b); err != nil { return xerrors.Errorf("read full: %w", err) } - atomic.AddInt64(&i.rSeqNo, 1) - if err := checkProtocolError(b); err != nil { return err }