mirror of
https://github.com/feschber/lan-mouse.git
synced 2026-04-06 01:11:27 +03:00
fix possible panic because channels are dropped
This commit is contained in:
@@ -134,9 +134,10 @@ impl Server {
|
|||||||
let (emulation_tx, emulation_rx) = channel(1); /* emulation requests */
|
let (emulation_tx, emulation_rx) = channel(1); /* emulation requests */
|
||||||
let (udp_recv_tx, udp_recv_rx) = channel(1); /* udp receiver */
|
let (udp_recv_tx, udp_recv_rx) = channel(1); /* udp receiver */
|
||||||
let (udp_send_tx, udp_send_rx) = channel(1); /* udp sender */
|
let (udp_send_tx, udp_send_rx) = channel(1); /* udp sender */
|
||||||
|
let (request_tx, mut request_rx) = channel(1); /* frontend requests */
|
||||||
|
|
||||||
// udp task
|
// udp task
|
||||||
let network = network_task::new(self.clone(), udp_recv_tx, udp_send_rx).await?;
|
let network = network_task::new(self.clone(), udp_recv_tx.clone(), udp_send_rx).await?;
|
||||||
|
|
||||||
// input capture
|
// input capture
|
||||||
let capture = capture_task::new(self.clone(), capture_rx, udp_send_tx.clone());
|
let capture = capture_task::new(self.clone(), capture_rx, udp_send_tx.clone());
|
||||||
@@ -173,8 +174,6 @@ impl Server {
|
|||||||
|
|
||||||
let mut join_handles = vec![];
|
let mut join_handles = vec![];
|
||||||
|
|
||||||
let (request_tx, mut request_rx) = channel(1);
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
tokio::select! {
|
tokio::select! {
|
||||||
stream = frontend.accept() => {
|
stream = frontend.accept() => {
|
||||||
@@ -187,7 +186,7 @@ impl Server {
|
|||||||
self.notify_frontend(FrontendEvent::CaptureStatus(self.capture_status.get()));
|
self.notify_frontend(FrontendEvent::CaptureStatus(self.capture_status.get()));
|
||||||
}
|
}
|
||||||
request = request_rx.recv() => {
|
request = request_rx.recv() => {
|
||||||
self.handle_request(&capture_tx, &emulation_tx, request.expect("channel closed")).await;
|
self.handle_request(&capture_tx.clone(), &emulation_tx.clone(), request.expect("channel closed")).await;
|
||||||
}
|
}
|
||||||
_ = self.notifies.frontend_event_pending.notified() => {
|
_ = self.notifies.frontend_event_pending.notified() => {
|
||||||
let events = self
|
let events = self
|
||||||
@@ -223,6 +222,15 @@ impl Server {
|
|||||||
futures::future::join_all(join_handles).await;
|
futures::future::join_all(join_handles).await;
|
||||||
let _ = join!(capture, dns_task, emulation, network, ping);
|
let _ = join!(capture, dns_task, emulation, network, ping);
|
||||||
|
|
||||||
|
assert!(
|
||||||
|
!capture_tx.is_closed()
|
||||||
|
&& !emulation_tx.is_closed()
|
||||||
|
&& !udp_recv_tx.is_closed()
|
||||||
|
&& !udp_send_tx.is_closed()
|
||||||
|
&& !request_tx.is_closed()
|
||||||
|
&& !dns_request.is_closed()
|
||||||
|
);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user