File tree Expand file tree Collapse file tree 1 file changed +10
-4
lines changed
watermelon-net/src/connection Expand file tree Collapse file tree 1 file changed +10
-4
lines changed Original file line number Diff line number Diff line change @@ -84,18 +84,24 @@ where
8484 }
8585
8686 pub fn poll_write_next ( & mut self , cx : & mut Context < ' _ > ) -> Poll < io:: Result < usize > > {
87- if !self . encoder . has_remaining ( ) {
87+ let remaining = self . encoder . remaining ( ) ;
88+ if remaining == 0 {
8889 return Poll :: Ready ( Ok ( 0 ) ) ;
8990 }
9091
91- let write_outcome = if self . socket . is_write_vectored ( ) {
92+ let chunk = self . encoder . chunk ( ) ;
93+ let write_outcome = if chunk. len ( ) < remaining && self . socket . is_write_vectored ( ) {
9294 let mut bufs = [ io:: IoSlice :: new ( & [ ] ) ; 64 ] ;
9395 let n = self . encoder . chunks_vectored ( & mut bufs) ;
94- debug_assert ! ( n > 0 ) ;
96+ debug_assert ! ( n >= 2 , "perf: chunks_vectored yielded less than 2 chunks despite the apparently fragmented internal encoder representation" ) ;
9597
9698 Pin :: new ( & mut self . socket ) . poll_write_vectored ( cx, & bufs[ ..n] )
9799 } else {
98- Pin :: new ( & mut self . socket ) . poll_write ( cx, self . encoder . chunk ( ) )
100+ debug_assert ! (
101+ !chunk. is_empty( ) ,
102+ "perf: chunk shouldn't be empty given that `remaining > 0`"
103+ ) ;
104+ Pin :: new ( & mut self . socket ) . poll_write ( cx, chunk)
99105 } ;
100106
101107 match write_outcome {
You can’t perform that action at this time.
0 commit comments