Skip to content

Commit 1004c5d

Browse files
committed
Drop TcpListener when worker is halted
1 parent f6d8fe5 commit 1004c5d

File tree

1 file changed

+13
-16
lines changed

1 file changed

+13
-16
lines changed

upstairs/src/dummy_downstairs_tests.rs

+13-16
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,7 @@ fn csl() -> Logger {
6666
pub struct DownstairsHandle {
6767
log: Logger,
6868

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>>,
7370
rx: mpsc::UnboundedReceiver<Message>,
7471
tx: mpsc::UnboundedSender<Message>,
7572
stop: oneshot::Sender<()>,
@@ -251,16 +248,17 @@ impl DownstairsHandle {
251248
def
252249
}
253250

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 {
256253
if let Err(()) = self.stop.send(()) {
257254
// This may be fine, if the worker was kicked out and stopped on
258255
// its own (e.g. because one of its queues was closed)
259256
warn!(self.log, "could not stop loopback worker");
260257
}
261258
let r = self.loopback_worker.await;
262259
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
264262
}
265263

266264
/// Awaits a `Message::Flush { .. }` and sends a `FlushAck`
@@ -355,18 +353,17 @@ pub struct DownstairsConfig {
355353
impl DownstairsConfig {
356354
async fn start(self, log: Logger) -> DownstairsHandle {
357355
let bind_addr: SocketAddr = "127.0.0.1:0".parse().unwrap();
358-
let listener = TcpListener::bind(&bind_addr).await.unwrap();
359356
let uuid = Uuid::new_v4();
360-
361-
self.restart(uuid, listener, log).await
357+
self.restart(uuid, bind_addr, log).await
362358
}
363359

364360
async fn restart(
365361
self,
366362
uuid: Uuid,
367-
listener: TcpListener,
363+
bind_addr: SocketAddr,
368364
log: Logger,
369365
) -> DownstairsHandle {
366+
let listener = TcpListener::bind(&bind_addr).await.unwrap();
370367
let local_addr = listener.local_addr().unwrap();
371368

372369
// Dummy repair task, to get a SocketAddr for the `YesItsMe` reply
@@ -443,7 +440,7 @@ impl DownstairsConfig {
443440
}
444441
}
445442
}
446-
Ok(listener)
443+
Ok(())
447444
});
448445

449446
DownstairsHandle {
@@ -594,8 +591,8 @@ impl TestHarness {
594591
let cfg = ds1.cfg.clone();
595592
let log = ds1.log.clone();
596593
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);
599596
}
600597

601598
/// Spawns a function on the `Guest`
@@ -2381,9 +2378,9 @@ async fn test_deactivate_slow() {
23812378
let cfg = ds1.cfg.clone();
23822379
let log = ds1.log.clone();
23832380
let uuid = ds1.uuid;
2384-
let listener = ds1.halt().await;
2381+
let addr = ds1.halt().await;
23852382
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;
23872384

23882385
ds1.negotiate_start().await;
23892386
reconnected.store(RECONNECT_DONE, Ordering::Release);

0 commit comments

Comments
 (0)