mirror of https://github.com/v2ray/v2ray-core
safe release buffer
parent
ccf1fb6616
commit
c1eccb3a45
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue