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 {
const chunkSize = 8 * 1024
for !mb.IsEmpty() { for !mb.IsEmpty() {
slice := mb.SliceBySize(chunkSize) var chunk buf.MultiBuffer
if err := w.writeData(slice); err != nil { if w.transferType == protocol.TransferTypeStream {
return err chunk = mb.SliceBySize(8 * 1024)
}
}
} else { } else {
for _, b := range mb { chunk = buf.NewMultiBufferValue(mb.SplitFirst())
if err := w.writeData(buf.NewMultiBufferValue(b)); err != nil {
return err
} }
if err := w.writeData(chunk); err != nil {
return err
} }
} }