@@ -66,10 +66,7 @@ fn csl() -> Logger {
66
66
pub struct DownstairsHandle {
67
67
log : Logger ,
68
68
69
- /// When the loopback worker finishes, we return the original listener
70
- /// so that we can reconnect later on.
71
- loopback_worker :
72
- tokio:: task:: JoinHandle < Result < TcpListener , CrucibleError > > ,
69
+ loopback_worker : tokio:: task:: JoinHandle < Result < ( ) , CrucibleError > > ,
73
70
rx : mpsc:: UnboundedReceiver < Message > ,
74
71
tx : mpsc:: UnboundedSender < Message > ,
75
72
stop : oneshot:: Sender < ( ) > ,
@@ -251,16 +248,17 @@ impl DownstairsHandle {
251
248
def
252
249
}
253
250
254
- /// Stops the loopback worker, returning the `TcpListener ` for reuse
255
- pub async fn halt ( self ) -> TcpListener {
251
+ /// Stops the loopback worker, returning the `SocketAddr ` for reuse
252
+ pub async fn halt ( self ) -> SocketAddr {
256
253
if let Err ( ( ) ) = self . stop . send ( ( ) ) {
257
254
// This may be fine, if the worker was kicked out and stopped on
258
255
// its own (e.g. because one of its queues was closed)
259
256
warn ! ( self . log, "could not stop loopback worker" ) ;
260
257
}
261
258
let r = self . loopback_worker . await ;
262
259
r. expect ( "failed to join loopback worker" )
263
- . expect ( "loopback worker returned an error" )
260
+ . expect ( "loopback worker returned an error" ) ;
261
+ self . local_addr
264
262
}
265
263
266
264
/// Awaits a `Message::Flush { .. }` and sends a `FlushAck`
@@ -355,18 +353,17 @@ pub struct DownstairsConfig {
355
353
impl DownstairsConfig {
356
354
async fn start ( self , log : Logger ) -> DownstairsHandle {
357
355
let bind_addr: SocketAddr = "127.0.0.1:0" . parse ( ) . unwrap ( ) ;
358
- let listener = TcpListener :: bind ( & bind_addr) . await . unwrap ( ) ;
359
356
let uuid = Uuid :: new_v4 ( ) ;
360
-
361
- self . restart ( uuid, listener, log) . await
357
+ self . restart ( uuid, bind_addr, log) . await
362
358
}
363
359
364
360
async fn restart (
365
361
self ,
366
362
uuid : Uuid ,
367
- listener : TcpListener ,
363
+ bind_addr : SocketAddr ,
368
364
log : Logger ,
369
365
) -> DownstairsHandle {
366
+ let listener = TcpListener :: bind ( & bind_addr) . await . unwrap ( ) ;
370
367
let local_addr = listener. local_addr ( ) . unwrap ( ) ;
371
368
372
369
// Dummy repair task, to get a SocketAddr for the `YesItsMe` reply
@@ -443,7 +440,7 @@ impl DownstairsConfig {
443
440
}
444
441
}
445
442
}
446
- Ok ( listener )
443
+ Ok ( ( ) )
447
444
} ) ;
448
445
449
446
DownstairsHandle {
@@ -594,8 +591,8 @@ impl TestHarness {
594
591
let cfg = ds1. cfg . clone ( ) ;
595
592
let log = ds1. log . clone ( ) ;
596
593
let uuid = ds1. uuid ;
597
- let listener = ds1. halt ( ) . await ;
598
- self . ds1 = Some ( cfg. restart ( uuid, listener , log) . await ) ;
594
+ let addr = ds1. halt ( ) . await ;
595
+ self . ds1 = Some ( cfg. restart ( uuid, addr , log) . await ) ;
599
596
}
600
597
601
598
/// Spawns a function on the `Guest`
@@ -2381,9 +2378,9 @@ async fn test_deactivate_slow() {
2381
2378
let cfg = ds1. cfg . clone ( ) ;
2382
2379
let log = ds1. log . clone ( ) ;
2383
2380
let uuid = ds1. uuid ;
2384
- let listener = ds1. halt ( ) . await ;
2381
+ let addr = ds1. halt ( ) . await ;
2385
2382
reconnected. store ( RECONNECT_TRYING , Ordering :: Release ) ;
2386
- let mut ds1 = cfg. restart ( uuid, listener , log) . await ;
2383
+ let mut ds1 = cfg. restart ( uuid, addr , log) . await ;
2387
2384
2388
2385
ds1. negotiate_start ( ) . await ;
2389
2386
reconnected. store ( RECONNECT_DONE , Ordering :: Release ) ;
0 commit comments