@@ -12,13 +12,13 @@ use bytes::{Buf as _, BufMut as _, Bytes, BytesMut};
12
12
use futures:: stream:: { self , FuturesUnordered } ;
13
13
use futures:: { Stream , StreamExt as _, TryStreamExt as _} ;
14
14
use tokio:: io:: { AsyncRead , AsyncReadExt as _, AsyncWrite , AsyncWriteExt as _} ;
15
+ use tokio:: select;
15
16
use tokio:: sync:: { mpsc, oneshot} ;
16
17
use tokio:: task:: JoinSet ;
17
- use tokio:: { select, try_join} ;
18
18
use tokio_stream:: wrappers:: ReceiverStream ;
19
19
use tokio_util:: codec:: { Encoder as _, FramedRead } ;
20
20
use tokio_util:: io:: StreamReader ;
21
- use tracing:: { error, instrument, trace, Instrument as _, Span } ;
21
+ use tracing:: { debug , error, instrument, trace, Instrument as _, Span } ;
22
22
use wasm_tokio:: cm:: {
23
23
BoolCodec , F32Codec , F64Codec , OptionDecoder , OptionEncoder , PrimValEncoder , ResultDecoder ,
24
24
ResultEncoder , S16Codec , S32Codec , S64Codec , S8Codec , TupleDecoder , TupleEncoder , U16Codec ,
@@ -1617,30 +1617,20 @@ where
1617
1617
return Err ( std:: io:: ErrorKind :: UnexpectedEof . into ( ) ) ;
1618
1618
} ;
1619
1619
let item = item?;
1620
- try_join ! (
1621
- async {
1622
- tx. send( item) . map_err( |_| {
1623
- std:: io:: Error :: new(
1624
- std:: io:: ErrorKind :: BrokenPipe ,
1625
- "future receiver closed" ,
1626
- )
1627
- } )
1628
- } ,
1629
- async {
1630
- if let Some ( rx) = dec. decoder_mut( ) . take_deferred( ) {
1631
- let buf = mem:: take( dec. read_buffer_mut( ) ) ;
1632
- let mut r = dec. into_inner( ) ;
1633
- if !r. buffer. is_empty( ) {
1634
- r. buffer. unsplit( buf) ;
1635
- } else {
1636
- r. buffer = buf;
1637
- }
1638
- rx( r, Vec :: default ( ) ) . await
1639
- } else {
1640
- Ok ( ( ) )
1641
- }
1620
+ if tx. send ( item) . is_err ( ) {
1621
+ debug ! ( "future receiver closed, discard data" ) ;
1622
+ return Ok ( ( ) ) ;
1623
+ }
1624
+ if let Some ( rx) = dec. decoder_mut ( ) . take_deferred ( ) {
1625
+ let buf = mem:: take ( dec. read_buffer_mut ( ) ) ;
1626
+ let mut r = dec. into_inner ( ) ;
1627
+ if !r. buffer . is_empty ( ) {
1628
+ r. buffer . unsplit ( buf) ;
1629
+ } else {
1630
+ r. buffer = buf;
1642
1631
}
1643
- ) ?;
1632
+ rx ( r, Vec :: default ( ) ) . await ?;
1633
+ }
1644
1634
Ok ( ( ) )
1645
1635
}
1646
1636
. instrument ( span) ,
@@ -2042,9 +2032,10 @@ where
2042
2032
)
2043
2033
} ) ?;
2044
2034
trace!( i, end, "received stream chunk" ) ;
2045
- tx. send( chunk) . await . map_err( |_| {
2046
- std:: io:: Error :: new( std:: io:: ErrorKind :: BrokenPipe , "stream receiver closed" )
2047
- } ) ?;
2035
+ if tx. send( chunk) . await . is_err( ) {
2036
+ debug!( "stream receiver closed, discard data" ) ;
2037
+ return Ok ( ( ) )
2038
+ }
2048
2039
for ( i, deferred) in zip( i.., mem:: take( & mut framed. decoder_mut( ) . deferred) ) {
2049
2040
if let Some ( deferred) = deferred {
2050
2041
let r = framed. get_ref( ) . index( & [ i] ) . map_err( std:: io:: Error :: other) ?;
@@ -2162,12 +2153,10 @@ where
2162
2153
return Ok ( ( ) ) ;
2163
2154
}
2164
2155
trace ! ( ?chunk, "received pending byte stream chunk" ) ;
2165
- tx. send ( chunk) . await . map_err ( |_| {
2166
- std:: io:: Error :: new (
2167
- std:: io:: ErrorKind :: BrokenPipe ,
2168
- "stream receiver closed" ,
2169
- )
2170
- } ) ?;
2156
+ if tx. send ( chunk) . await . is_err ( ) {
2157
+ debug ! ( "stream receiver closed, discard data" ) ;
2158
+ return Ok ( ( ) ) ;
2159
+ }
2171
2160
}
2172
2161
Ok ( ( ) )
2173
2162
}
@@ -2240,12 +2229,10 @@ where
2240
2229
return Ok ( ( ) ) ;
2241
2230
}
2242
2231
trace ! ( ?chunk, "received byte stream chunk" ) ;
2243
- tx. send ( std:: io:: Result :: Ok ( chunk) ) . await . map_err ( |_| {
2244
- std:: io:: Error :: new (
2245
- std:: io:: ErrorKind :: BrokenPipe ,
2246
- "stream receiver closed" ,
2247
- )
2248
- } ) ?;
2232
+ if tx. send ( std:: io:: Result :: Ok ( chunk) ) . await . is_err ( ) {
2233
+ debug ! ( "stream receiver closed, discard data" ) ;
2234
+ return Ok ( ( ) ) ;
2235
+ }
2249
2236
}
2250
2237
Ok ( ( ) )
2251
2238
} )
0 commit comments