Skip to content

Commit 604fc0b

Browse files
committed
fix: remove empty slice
1 parent ef5a4f1 commit 604fc0b

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

stream.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,29 @@ func (r *pendingData) moveToWithoutLock(toBuf *linkedBuffer) {
488488
r.stream.session.logger.error("readBufferSlice error" + err.Error())
489489
break
490490
}
491+
if slice.size() == 0 {
492+
// 首个slice就是空切片直接回收即可
493+
if toBuf.sliceList.front() == nil {
494+
offset = slice.nextBufferOffset()
495+
r.stream.session.bufferManager.recycleBuffer(slice)
496+
continue
497+
}
498+
// 找到最后一个slice 只要front()有值 back() 就一定有值
499+
preSlice := toBuf.sliceList.back()
500+
if slice.hasNext() {
501+
// 如果当前空slice有下一个slice,直接修改preSlice的next slice 并回收当前slice
502+
preSlice.linkNext(slice.nextBufferOffset())
503+
offset = slice.nextBufferOffset() // 索引下一个
504+
r.stream.session.bufferManager.recycleBuffer(slice)
505+
continue
506+
} else {
507+
// 如果当前空slice是最后一个slice, 清除最后一个slice的next flag 并且回收当前slice
508+
preSlice.clearFlag()
509+
preSlice.setInUsed()
510+
r.stream.session.bufferManager.recycleBuffer(slice)
511+
break
512+
}
513+
}
491514
toBuf.appendBufferSlice(slice)
492515
if !slice.hasNext() {
493516
break

0 commit comments

Comments
 (0)