Skip to content

Commit 8fb1634

Browse files
committed
Fix calculate reader headroom
1 parent 4ab8cac commit 8fb1634

1 file changed

Lines changed: 26 additions & 2 deletions

File tree

common/network/thread.go

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,29 @@ func CalculateFrontHeadroom(writer any) int {
9898
return headroom
9999
}
100100

101+
func calculateReaderFrontHeadroom(reader any) int {
102+
var headroom int
103+
for {
104+
if reader == nil {
105+
break
106+
}
107+
if lazyRoom, isLazy := reader.(LazyHeadroom); isLazy && lazyRoom.LazyHeadroom() {
108+
return DefaultHeadroom
109+
}
110+
if headroomWriter, needHeadroom := reader.(FrontHeadroom); needHeadroom {
111+
headroom += headroomWriter.FrontHeadroom()
112+
}
113+
if upstreamWriter, hasUpstreamWriter := reader.(WithUpstreamReader); hasUpstreamWriter {
114+
reader = upstreamWriter.UpstreamReader()
115+
} else if upstream, hasUpstream := reader.(common.WithUpstream); hasUpstream {
116+
reader = upstream.Upstream()
117+
} else {
118+
break
119+
}
120+
}
121+
return headroom
122+
}
123+
101124
func CalculateRearHeadroom(writer any) int {
102125
var headroom int
103126
for {
@@ -131,14 +154,15 @@ type WriterWithMTU interface {
131154

132155
func CalculateMTU(reader any, writer any) int {
133156
readerMTU := calculateReaderMTU(reader)
157+
readerHeadroom := calculateReaderFrontHeadroom(reader)
134158
writerMTU := calculateWriterMTU(writer)
135159
if readerMTU > writerMTU {
136-
return readerMTU
160+
return readerMTU + readerHeadroom
137161
}
138162
if writerMTU > buf.BufferSize {
139163
return 0
140164
}
141-
return writerMTU
165+
return writerMTU + readerHeadroom
142166
}
143167

144168
func calculateReaderMTU(reader any) int {

0 commit comments

Comments
 (0)