2
2
use std:: task:: { ready, Context , Poll } ;
3
3
use std:: { cell:: RefCell , collections:: VecDeque , future:: Future , pin:: Pin , rc:: Rc } ;
4
4
5
- use ntex_bytes:: Pool ;
6
5
use ntex_codec:: { Decoder , Encoder } ;
7
6
use ntex_io:: {
8
7
Decoded , DispatchItem , DispatcherConfig , IoBoxed , IoRef , IoStatusUpdate , RecvError ,
@@ -22,8 +21,7 @@ pin_project_lite::pin_project! {
22
21
U : Decoder ,
23
22
U : ' static ,
24
23
{
25
- inner: DispatcherInner <S , U >,
26
- pool: Pool ,
24
+ inner: DispatcherInner <S , U >
27
25
}
28
26
}
29
27
@@ -122,11 +120,9 @@ where
122
120
base : 0 ,
123
121
queue : VecDeque :: new ( ) ,
124
122
} ) ) ;
125
- let pool = io. memory_pool ( ) . pool ( ) ;
126
123
let keepalive_timeout = config. keepalive_timeout ( ) ;
127
124
128
125
Dispatcher {
129
- pool,
130
126
inner : DispatcherInner {
131
127
io,
132
128
codec,
@@ -249,14 +245,6 @@ where
249
245
}
250
246
}
251
247
252
- // handle memory pool pressure
253
- if this. pool . poll_ready ( cx) . is_pending ( ) {
254
- inner. flags . remove ( Flags :: KA_TIMEOUT | Flags :: READ_TIMEOUT ) ;
255
- inner. io . stop_timer ( ) ;
256
- inner. io . pause ( ) ;
257
- return Poll :: Pending ;
258
- }
259
-
260
248
loop {
261
249
match inner. st {
262
250
IoDispatcherState :: Processing => {
@@ -312,9 +300,7 @@ where
312
300
IoDispatcherState :: Backpressure => {
313
301
match ready ! ( inner. poll_service( cx) ) {
314
302
PollService :: Ready => ( ) ,
315
- PollService :: Item ( item) => {
316
- inner. call_service ( cx, item) ;
317
- }
303
+ PollService :: Item ( item) => inner. call_service ( cx, item) ,
318
304
PollService :: Continue => continue ,
319
305
} ;
320
306
@@ -334,7 +320,11 @@ where
334
320
335
321
// service may relay on poll_ready for response results
336
322
if !inner. flags . contains ( Flags :: READY_ERR ) {
337
- let _ = inner. service . poll_ready ( cx) ;
323
+ if let Poll :: Ready ( res) = inner. service . poll_ready ( cx) {
324
+ if res. is_err ( ) {
325
+ inner. flags . insert ( Flags :: READY_ERR ) ;
326
+ }
327
+ }
338
328
}
339
329
340
330
if inner. state . borrow ( ) . queue . is_empty ( ) {
@@ -394,7 +384,7 @@ where
394
384
{
395
385
fn call_service ( & mut self , cx : & mut Context < ' _ > , item : DispatchItem < U > ) {
396
386
let mut state = self . state . borrow_mut ( ) ;
397
- let mut fut = self . service . call ( item) ;
387
+ let mut fut = self . service . call_nowait ( item) ;
398
388
399
389
// optimize first call
400
390
if self . response . is_none ( ) {
@@ -429,8 +419,7 @@ where
429
419
let codec = self . codec . clone ( ) ;
430
420
let state = self . state . clone ( ) ;
431
421
432
- #[ allow( clippy:: let_underscore_future) ]
433
- let _ = ntex_util:: spawn ( async move {
422
+ ntex_util:: spawn ( async move {
434
423
let item = fut. await ;
435
424
state. borrow_mut ( ) . handle_result ( item, response_idx, & st, & codec, true ) ;
436
425
} ) ;
@@ -502,8 +491,8 @@ where
502
491
Poll :: Ready ( Err ( err) ) => {
503
492
log:: trace!( "{}: Service readiness check failed, stopping" , self . io. tag( ) ) ;
504
493
self . st = IoDispatcherState :: Stop ;
505
- self . state . borrow_mut ( ) . error = Some ( IoDispatcherError :: Service ( err) ) ;
506
494
self . flags . insert ( Flags :: READY_ERR ) ;
495
+ self . state . borrow_mut ( ) . error = Some ( IoDispatcherError :: Service ( err) ) ;
507
496
Poll :: Ready ( PollService :: Continue )
508
497
}
509
498
}
@@ -629,7 +618,6 @@ mod tests {
629
618
630
619
(
631
620
Dispatcher {
632
- pool : io. memory_pool ( ) . pool ( ) ,
633
621
inner : DispatcherInner {
634
622
codec,
635
623
state,
0 commit comments