diff --git a/transport_replicate.go b/transport_replicate.go index e1f2b32..2b17c4a 100644 --- a/transport_replicate.go +++ b/transport_replicate.go @@ -151,13 +151,20 @@ func (t *replicateTransport) sendSnapshot(m *proto.Message, rs *snapshotStatus) default: data, err = m.Snapshot.Next() + + // to prevent err from being overrided + var innerError error if len(data) > 0 { // write block size binary.BigEndian.PutUint32(sizeBuf, uint32(len(data))) - if _, err = bufWr.Write(sizeBuf); err == nil { - _, err = bufWr.Write(data) + if _, innerError = bufWr.Write(sizeBuf); innerError == nil { + _, innerError = bufWr.Write(data) } } + + if err == nil { + err = innerError + } } } @@ -165,10 +172,6 @@ func (t *replicateTransport) sendSnapshot(m *proto.Message, rs *snapshotStatus) if err != nil && err != io.EOF { return } - binary.BigEndian.PutUint32(sizeBuf, 0) - if _, err = bufWr.Write(sizeBuf); err != nil { - return - } if err = bufWr.Flush(); err != nil { return }