@@ -7,8 +7,10 @@ use bytes::Bytes;
77use thiserror:: Error ;
88use tracing:: trace;
99
10+ use self :: state:: get_or_insert_recv;
11+
1012use super :: spaces:: { Retransmits , ThinRetransmits } ;
11- use crate :: { frame, Dir , StreamId , VarInt } ;
13+ use crate :: { connection :: streams :: state :: get_or_insert_send , frame, Dir , StreamId , VarInt } ;
1214
1315mod recv;
1416use recv:: Recv ;
@@ -133,7 +135,7 @@ impl<'a> RecvStream<'a> {
133135 hash_map:: Entry :: Occupied ( s) => s,
134136 hash_map:: Entry :: Vacant ( _) => return Err ( UnknownStream { _private : ( ) } ) ,
135137 } ;
136- let stream = entry. get_mut ( ) ;
138+ let stream = get_or_insert_recv ( self . state . stream_receive_window ) ( entry. get_mut ( ) ) ;
137139
138140 let ( read_credits, stop_sending) = stream. stop ( ) ?;
139141 if stop_sending. should_transmit ( ) {
@@ -207,11 +209,16 @@ impl<'a> SendStream<'a> {
207209 }
208210
209211 let limit = self . state . write_limit ( ) ;
212+
213+ let max_send_data = self . state . initial_max_send_data ( self . id ) ;
214+
210215 let stream = self
211216 . state
212217 . send
213218 . get_mut ( & self . id )
219+ . map ( get_or_insert_send ( max_send_data) )
214220 . ok_or ( WriteError :: UnknownStream ) ?;
221+
215222 if limit == 0 {
216223 trace ! (
217224 stream = %self . id, max_data = self . state. max_data, data_sent = self . state. data_sent,
@@ -237,8 +244,9 @@ impl<'a> SendStream<'a> {
237244
238245 /// Check if this stream was stopped, get the reason if it was
239246 pub fn stopped ( & mut self ) -> Result < Option < VarInt > , UnknownStream > {
240- match self . state . send . get ( & self . id ) {
241- Some ( s) => Ok ( s. stop_reason ) ,
247+ match self . state . send . get ( & self . id ) . as_ref ( ) {
248+ Some ( Some ( s) ) => Ok ( s. stop_reason ) ,
249+ Some ( None ) => Ok ( None ) ,
242250 None => Err ( UnknownStream { _private : ( ) } ) ,
243251 }
244252 }
@@ -249,10 +257,12 @@ impl<'a> SendStream<'a> {
249257 ///
250258 /// [`StreamEvent::Finished`]: crate::StreamEvent::Finished
251259 pub fn finish ( & mut self ) -> Result < ( ) , FinishError > {
260+ let max_send_data = self . state . initial_max_send_data ( self . id ) ;
252261 let stream = self
253262 . state
254263 . send
255264 . get_mut ( & self . id )
265+ . map ( get_or_insert_send ( max_send_data) )
256266 . ok_or ( FinishError :: UnknownStream ) ?;
257267
258268 let was_pending = stream. is_pending ( ) ;
@@ -269,10 +279,12 @@ impl<'a> SendStream<'a> {
269279 /// # Panics
270280 /// - when applied to a receive stream
271281 pub fn reset ( & mut self , error_code : VarInt ) -> Result < ( ) , UnknownStream > {
282+ let max_send_data = self . state . initial_max_send_data ( self . id ) ;
272283 let stream = self
273284 . state
274285 . send
275286 . get_mut ( & self . id )
287+ . map ( get_or_insert_send ( max_send_data) )
276288 . ok_or ( UnknownStream { _private : ( ) } ) ?;
277289
278290 if matches ! ( stream. state, SendState :: ResetSent ) {
@@ -296,10 +308,12 @@ impl<'a> SendStream<'a> {
296308 /// # Panics
297309 /// - when applied to a receive stream
298310 pub fn set_priority ( & mut self , priority : i32 ) -> Result < ( ) , UnknownStream > {
311+ let max_send_data = self . state . initial_max_send_data ( self . id ) ;
299312 let stream = self
300313 . state
301314 . send
302315 . get_mut ( & self . id )
316+ . map ( get_or_insert_send ( max_send_data) )
303317 . ok_or ( UnknownStream { _private : ( ) } ) ?;
304318
305319 stream. priority = priority;
@@ -317,7 +331,7 @@ impl<'a> SendStream<'a> {
317331 . get ( & self . id )
318332 . ok_or ( UnknownStream { _private : ( ) } ) ?;
319333
320- Ok ( stream. priority )
334+ Ok ( stream. as_ref ( ) . map ( |s| s . priority ) . unwrap_or_default ( ) )
321335 }
322336}
323337
0 commit comments