Browse Source

Fix: Spawn control listener threads using `std` API

The `tokio::task::spawn_blocking` function will try to join them at the end of `main`, which hangs forever since the listener never finishes.
tags/v0.1.0^2^2
Philipp Oppermann 3 years ago
parent
commit
f686d3fe2a
Failed to extract signature
2 changed files with 3 additions and 4 deletions
  1. +2
    -3
      binaries/coordinator/src/control.rs
  2. +1
    -1
      binaries/coordinator/src/lib.rs

+ 2
- 3
binaries/coordinator/src/control.rs View File

@@ -9,14 +9,13 @@ use std::{
};
use tokio::sync::{mpsc, oneshot};
use tokio_stream::wrappers::ReceiverStream;
use uuid::Uuid;

pub(crate) async fn control_events(
control_listen_addr: SocketAddr,
) -> eyre::Result<impl Stream<Item = Event>> {
let (tx, rx) = mpsc::channel(10);

tokio::task::spawn_blocking(move || listen(control_listen_addr, tx));
std::thread::spawn(move || listen(control_listen_addr, tx));

Ok(ReceiverStream::new(rx).map(Event::Control))
}
@@ -38,7 +37,7 @@ fn listen(control_listen_addr: SocketAddr, tx: mpsc::Sender<ControlEvent>) {
match connection.wrap_err("failed to connect") {
Ok(connection) => {
let tx = tx.clone();
tokio::task::spawn_blocking(|| handle_requests(connection, tx));
std::thread::spawn(|| handle_requests(connection, tx));
}
Err(err) => {
if tx.blocking_send(err.into()).is_err() {


+ 1
- 1
binaries/coordinator/src/lib.rs View File

@@ -157,7 +157,7 @@ async fn start(runtime_path: &Path) -> eyre::Result<()> {
};
let _ = reply_sender.send(reply);
}
ControlEvent::Error(_) => todo!(),
ControlEvent::Error(err) => return Err(err),
},
}
}


Loading…
Cancel
Save