diff options
| author | Eskil Queseth <eskilq@kth.se> | 2020-10-14 02:04:16 +0200 |
|---|---|---|
| committer | Eskil Queseth <eskilq@kth.se> | 2020-10-14 02:04:16 +0200 |
| commit | a3c393a711c71698ef833f1923374798cbb0d0b4 (patch) | |
| tree | 5348b8093ad1d5bf8b095d4e31d59f4e030c8ba8 /mumd/src/command.rs | |
| parent | 3d8009a0201fba0bdc464fae0797d3bb3bcf69f4 (diff) | |
| download | mum-a3c393a711c71698ef833f1923374798cbb0d0b4.tar.gz | |
fix code so that it doesn't deadlock
Diffstat (limited to 'mumd/src/command.rs')
| -rw-r--r-- | mumd/src/command.rs | 12 |
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) {} + } } } |
