aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/command.rs
diff options
context:
space:
mode:
authorEskil Queseth <eskilq@kth.se>2020-10-14 02:04:16 +0200
committerEskil Queseth <eskilq@kth.se>2020-10-14 02:04:16 +0200
commita3c393a711c71698ef833f1923374798cbb0d0b4 (patch)
tree5348b8093ad1d5bf8b095d4e31d59f4e030c8ba8 /mumd/src/command.rs
parent3d8009a0201fba0bdc464fae0797d3bb3bcf69f4 (diff)
downloadmum-a3c393a711c71698ef833f1923374798cbb0d0b4.tar.gz
fix code so that it doesn't deadlock
Diffstat (limited to 'mumd/src/command.rs')
-rw-r--r--mumd/src/command.rs12
1 files changed, 10 insertions, 2 deletions
diff --git a/mumd/src/command.rs b/mumd/src/command.rs
index c3b72bf..8a5c715 100644
--- a/mumd/src/command.rs
+++ b/mumd/src/command.rs
@@ -1,8 +1,9 @@
-use crate::state::{Channel, Server, State};
+use crate::state::{Channel, Server, State, StatePhase};
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
use tokio::sync::mpsc;
+use log::*;
#[derive(Debug)]
pub enum Command {
@@ -38,6 +39,13 @@ pub async fn handle(
) {
//TODO err if not connected
while let Some(command) = command_receiver.recv().await {
- state.lock().unwrap().handle_command(command).await;
+ debug!("Parsing command {:?}", command);
+ let mut state = state.lock().unwrap();
+ let (wait_for_connected, _) = state.handle_command(command).await;
+ if wait_for_connected {
+ let mut watcher = state.phase_receiver();
+ drop(state);
+ while !matches!(watcher.recv().await.unwrap(), StatePhase::Connected) {}
+ }
}
}