@@ -41,7 +41,11 @@ enum Kind {
41
41
content_length : Option < u64 > ,
42
42
recv : h2:: RecvStream ,
43
43
} ,
44
- Wrapped ( Pin < Box < dyn Stream < Item = Result < Chunk , Box < dyn StdError + Send + Sync > > > + Send > > ) ,
44
+ // NOTE: This requires `Sync` because of how easy it is to use `await`
45
+ // while a borrow of a `Request<Body>` exists.
46
+ //
47
+ // See https://github.com/rust-lang/rust/issues/57017
48
+ Wrapped ( Pin < Box < dyn Stream < Item = Result < Chunk , Box < dyn StdError + Send + Sync > > > + Send + Sync > > ) ,
45
49
}
46
50
47
51
struct Extra {
@@ -142,7 +146,7 @@ impl Body {
142
146
/// ```
143
147
pub fn wrap_stream < S > ( stream : S ) -> Body
144
148
where
145
- S : TryStream + Send + ' static ,
149
+ S : TryStream + Send + Sync + ' static ,
146
150
S :: Error : Into < Box < dyn StdError + Send + Sync > > ,
147
151
Chunk : From < S :: Ok > ,
148
152
{
@@ -411,13 +415,13 @@ impl Stream for Body {
411
415
412
416
413
417
impl
414
- From < Box < dyn Stream < Item = Result < Chunk , Box < dyn StdError + Send + Sync > > > + Send > >
418
+ From < Box < dyn Stream < Item = Result < Chunk , Box < dyn StdError + Send + Sync > > > + Send + Sync > >
415
419
for Body
416
420
{
417
421
#[ inline]
418
422
fn from (
419
423
stream : Box <
420
- dyn Stream < Item = Result < Chunk , Box < dyn StdError + Send + Sync > > > + Send ,
424
+ dyn Stream < Item = Result < Chunk , Box < dyn StdError + Send + Sync > > > + Send + Sync ,
421
425
> ,
422
426
) -> Body {
423
427
Body :: new ( Kind :: Wrapped ( stream. into ( ) ) )
0 commit comments