@@ -30,7 +30,7 @@ use std::{
30
30
31
31
use crate :: proto:: { Flag , Message } ;
32
32
use crate :: {
33
- stream:: drop_listener:: GracefullyClosed ,
33
+ stream:: drop_listener:: DropMessage ,
34
34
stream:: framed_dc:: FramedDc ,
35
35
stream:: state:: { Closing , State } ,
36
36
} ;
@@ -62,7 +62,7 @@ pub struct Stream<T> {
62
62
state : State ,
63
63
read_buffer : Bytes ,
64
64
/// Dropping this will close the oneshot and notify the receiver by emitting `Canceled`.
65
- drop_notifier : Option < oneshot:: Sender < GracefullyClosed > > ,
65
+ drop_notifier : Option < oneshot:: Sender < DropMessage > > ,
66
66
}
67
67
68
68
impl < T > Stream < T >
@@ -139,21 +139,29 @@ where
139
139
..
140
140
} = & mut * self ;
141
141
142
- match ready ! ( io_poll_next( io, cx) ) ? {
143
- Some ( ( flag, message) ) => {
142
+ match ready ! ( io_poll_next( io, cx) ) {
143
+ Ok ( Some ( ( flag, message) ) ) => {
144
144
if let Some ( flag) = flag {
145
145
state. handle_inbound_flag ( flag, read_buffer) ;
146
146
}
147
147
148
- debug_assert ! ( read_buffer. is_empty( ) ) ;
149
148
if let Some ( message) = message {
150
149
* read_buffer = message. into ( ) ;
151
150
}
152
151
}
153
- None => {
152
+ Ok ( None ) => {
154
153
state. handle_inbound_flag ( Flag :: FIN , read_buffer) ;
155
154
return Poll :: Ready ( Ok ( 0 ) ) ;
156
155
}
156
+ Err ( e) => {
157
+ log:: error!( "Error while reading next message: {:?}" , e) ;
158
+ let _ = self
159
+ . drop_notifier
160
+ . take ( )
161
+ . expect ( "should be able to take drop_notifier value" )
162
+ . send ( DropMessage :: SendReset ) ;
163
+ return Poll :: Ready ( Err ( e) ) ;
164
+ }
157
165
}
158
166
}
159
167
}
@@ -231,7 +239,7 @@ where
231
239
. drop_notifier
232
240
. take ( )
233
241
. expect ( "to not close twice" )
234
- . send ( GracefullyClosed { } ) ;
242
+ . send ( DropMessage :: GracefullyClosed ) ;
235
243
236
244
return Poll :: Ready ( Ok ( ( ) ) ) ;
237
245
}
0 commit comments