@@ -437,19 +437,17 @@ impl<M: jsonrpc::Metadata, S: jsonrpc::Middleware<M>> ServerBuilder<M, S> {
437
437
. collect :: < io:: Result < ( Vec < _ > ) > > ( ) ?;
438
438
handles. push ( ( eloop, close, done_rx) ) ;
439
439
440
- let ( executors, closers , done_rxs) = handles
440
+ let ( executors, done_rxs) = handles
441
441
. into_iter ( )
442
- . fold ( ( vec ! [ ] , vec ! [ ] , vec ! [ ] ) , |mut acc, ( eloop, closer, done_rx) | {
443
- acc. 0 . push ( eloop) ;
444
- acc. 1 . push ( closer) ;
445
- acc. 2 . push ( done_rx) ;
442
+ . fold ( ( vec ! [ ] , vec ! [ ] ) , |mut acc, ( eloop, closer, done_rx) | {
443
+ acc. 0 . push ( ( eloop, closer) ) ;
444
+ acc. 1 . push ( done_rx) ;
446
445
acc
447
446
} ) ;
448
447
449
448
Ok ( Server {
450
449
address : local_addr?,
451
450
executors : Arc :: new ( Mutex :: new ( Some ( executors) ) ) ,
452
- close : Arc :: new ( Mutex :: new ( Some ( closers) ) ) ,
453
451
done : Some ( done_rxs) ,
454
452
} )
455
453
}
@@ -581,30 +579,26 @@ fn configure_port(_reuse: bool, _tcp: &net2::TcpBuilder) -> io::Result<()> {
581
579
582
580
/// Handle used to close the server. Can be cloned and passed around to different threads and be used
583
581
/// to close a server that is `wait()`ing.
582
+
584
583
#[ derive( Clone ) ]
585
- pub struct CloseHandle {
586
- executors : Arc < Mutex < Option < Vec < Executor > > > > ,
587
- closers : Arc < Mutex < Option < Vec < oneshot:: Sender < ( ) > > > > > ,
588
- }
584
+ pub struct CloseHandle ( Arc < Mutex < Option < Vec < ( Executor , oneshot:: Sender < ( ) > ) > > > > ) ;
589
585
590
586
impl CloseHandle {
591
587
/// Shutdown a running server
592
588
pub fn close ( self ) {
593
- if let Some ( executors) = self . executors . lock ( ) . take ( ) {
594
- for executor in executors { executor. close ( ) }
595
- }
596
-
597
- if let Some ( closers) = self . closers . lock ( ) . take ( ) {
598
- for closer in closers { let _ = closer. send ( ( ) ) ; }
589
+ if let Some ( executors) = self . 0 . lock ( ) . take ( ) {
590
+ for ( executor, closer) in executors {
591
+ executor. close ( ) ;
592
+ let _ = closer. send ( ( ) ) ;
593
+ }
599
594
}
600
595
}
601
596
}
602
597
603
598
/// jsonrpc http server instance
604
599
pub struct Server {
605
600
address : SocketAddr ,
606
- executors : Arc < Mutex < Option < Vec < Executor > > > > ,
607
- close : Arc < Mutex < Option < Vec < oneshot:: Sender < ( ) > > > > > ,
601
+ executors : Arc < Mutex < Option < Vec < ( Executor , oneshot:: Sender < ( ) > ) > > > > ,
608
602
done : Option < Vec < oneshot:: Receiver < ( ) > > > ,
609
603
}
610
604
@@ -631,10 +625,7 @@ impl Server {
631
625
/// Get a handle that allows us to close the server from a different thread and/or while the
632
626
/// server is `wait()`ing.
633
627
pub fn close_handle ( & self ) -> CloseHandle {
634
- CloseHandle {
635
- executors : self . executors . clone ( ) ,
636
- closers : self . close . clone ( ) ,
637
- }
628
+ CloseHandle ( self . executors . clone ( ) )
638
629
}
639
630
}
640
631
0 commit comments