safe release buffer

pull/700/head
Darien Raymond 2017-11-07 11:58:43 +01:00
parent ccf1fb6616
commit c1eccb3a45
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
1 changed files with 10 additions and 12 deletions

View File

@ -82,23 +82,21 @@ func (w *Writer) writeData(mb buf.MultiBuffer) error {
// Write implements buf.MultiBufferWriter. // Write implements buf.MultiBufferWriter.
func (w *Writer) Write(mb buf.MultiBuffer) error { func (w *Writer) Write(mb buf.MultiBuffer) error {
defer mb.Release()
if mb.IsEmpty() { if mb.IsEmpty() {
return w.writeMetaOnly() return w.writeMetaOnly()
} }
if w.transferType == protocol.TransferTypeStream { for !mb.IsEmpty() {
const chunkSize = 8 * 1024 var chunk buf.MultiBuffer
for !mb.IsEmpty() { if w.transferType == protocol.TransferTypeStream {
slice := mb.SliceBySize(chunkSize) chunk = mb.SliceBySize(8 * 1024)
if err := w.writeData(slice); err != nil { } else {
return err chunk = buf.NewMultiBufferValue(mb.SplitFirst())
}
} }
} else { if err := w.writeData(chunk); err != nil {
for _, b := range mb { return err
if err := w.writeData(buf.NewMultiBufferValue(b)); err != nil {
return err
}
} }
} }