@@ -214,7 +214,7 @@ where
214
214
}
215
215
Err ( e) => Err ( e) ,
216
216
} ,
217
- None => Ok ( ( Async01 :: NotReady , None ) ) ,
217
+ None => f . poll_complete ( ) . map ( |i| ( i , None ) ) ,
218
218
} ) {
219
219
Ok ( ( Async01 :: Ready ( _) , _) ) => task03:: Poll :: Ready ( Ok ( ( ) ) ) ,
220
220
Ok ( ( Async01 :: NotReady , item) ) => {
@@ -226,10 +226,47 @@ where
226
226
}
227
227
228
228
fn poll_close (
229
- self : Pin < & mut Self > ,
229
+ mut self : Pin < & mut Self > ,
230
230
lw : & LocalWaker ,
231
231
) -> task03:: Poll < Result < ( ) , Self :: SinkError > > {
232
- self . poll_flush ( lw)
232
+ let item = self . buffer . take ( ) ;
233
+ match self . in_notify ( lw, |f| match item {
234
+ Some ( i) => match f. start_send ( i) {
235
+ Ok ( AsyncSink01 :: Ready ) => {
236
+ match f. poll_complete ( ) {
237
+ Ok ( Async01 :: Ready ( _) ) => {
238
+ match <S as Sink01 >:: close ( f) {
239
+ Ok ( i) => Ok ( ( i, None ) ) ,
240
+ Err ( e) => Err ( e)
241
+ }
242
+ } ,
243
+ Ok ( Async01 :: NotReady ) => Ok ( ( Async01 :: NotReady , None ) ) ,
244
+ Err ( e) => Err ( e)
245
+ }
246
+ } ,
247
+ Ok ( AsyncSink01 :: NotReady ( t) ) => {
248
+ Ok ( ( Async01 :: NotReady , Some ( t) ) )
249
+ }
250
+ Err ( e) => Err ( e) ,
251
+ } ,
252
+ None => match f. poll_complete ( ) {
253
+ Ok ( Async01 :: Ready ( _) ) => {
254
+ match <S as Sink01 >:: close ( f) {
255
+ Ok ( i) => Ok ( ( i, None ) ) ,
256
+ Err ( e) => Err ( e)
257
+ }
258
+ } ,
259
+ Ok ( Async01 :: NotReady ) => Ok ( ( Async01 :: NotReady , None ) ) ,
260
+ Err ( e) => Err ( e)
261
+ } ,
262
+ } ) {
263
+ Ok ( ( Async01 :: Ready ( _) , _) ) => task03:: Poll :: Ready ( Ok ( ( ) ) ) ,
264
+ Ok ( ( Async01 :: NotReady , item) ) => {
265
+ self . buffer = item;
266
+ task03:: Poll :: Pending
267
+ }
268
+ Err ( e) => task03:: Poll :: Ready ( Err ( e) ) ,
269
+ }
233
270
}
234
271
}
235
272
0 commit comments