@@ -2,13 +2,15 @@ use derivative::Derivative;
22
33use super :: {
44 conn:: PendingConnection ,
5+ connection_requester,
56 connection_requester:: {
67 ConnectionRequest ,
78 ConnectionRequestReceiver ,
89 ConnectionRequester ,
910 RequestedConnection ,
1011 } ,
1112 establish:: ConnectionEstablisher ,
13+ manager,
1214 manager:: { ManagementRequestReceiver , PoolManagementRequest , PoolManager } ,
1315 options:: { ConnectionOptions , ConnectionPoolOptions } ,
1416 Connection ,
@@ -132,10 +134,10 @@ impl ConnectionPoolWorker {
132134 . as_ref ( )
133135 . map ( |pool_options| ConnectionOptions :: from ( pool_options. clone ( ) ) ) ;
134136
135- let ( handle_listener , handle ) = HandleListener :: new ( ) ;
137+ let ( handle , handle_listener ) = handle_channel ( ) ;
136138 let ( connection_requester, request_receiver) =
137- ConnectionRequester :: new ( address. clone ( ) , handle) ;
138- let ( manager, management_receiver) = PoolManager :: new ( ) ;
139+ connection_requester :: channel ( address. clone ( ) , handle) ;
140+ let ( manager, management_receiver) = manager :: channel ( ) ;
139141
140142 let worker = ConnectionPoolWorker {
141143 address,
@@ -498,25 +500,35 @@ impl From<PoolManagementRequest> for PoolTask {
498500 }
499501}
500502
503+ /// Constructs a new channel for for monitoring whether this pool still has references
504+ /// to it.
505+ fn handle_channel ( ) -> ( PoolWorkerHandle , HandleListener ) {
506+ let ( sender, receiver) = mpsc:: channel ( 1 ) ;
507+ ( PoolWorkerHandle { sender } , HandleListener { receiver } )
508+ }
509+
501510/// Handle to the worker. Once all handles have been dropped, the worker
502511/// will stop waiting for new requests and drop the pool itself.
503512#[ derive( Debug , Clone ) ]
504513pub ( super ) struct PoolWorkerHandle {
505514 sender : mpsc:: Sender < ( ) > ,
506515}
507516
517+ impl PoolWorkerHandle {
518+ #[ cfg( test) ]
519+ pub ( super ) fn new_mocked ( ) -> Self {
520+ let ( s, _) = handle_channel ( ) ;
521+ s
522+ }
523+ }
524+
508525/// Listener used to determine when all handles have been dropped.
509526#[ derive( Debug ) ]
510527struct HandleListener {
511528 receiver : mpsc:: Receiver < ( ) > ,
512529}
513530
514531impl HandleListener {
515- fn new ( ) -> ( Self , PoolWorkerHandle ) {
516- let ( sender, receiver) = mpsc:: channel ( 1 ) ;
517- ( Self { receiver } , PoolWorkerHandle { sender } )
518- }
519-
520532 /// Listen until all handles are dropped.
521533 /// This will not return until all handles are dropped, so make sure to only poll this via
522534 /// select or with a timeout.
0 commit comments