diff options
| author | Eskil Queseth <eskilq@kth.se> | 2021-05-21 15:21:57 +0200 |
|---|---|---|
| committer | Eskil Queseth <eskilq@kth.se> | 2021-05-21 15:21:57 +0200 |
| commit | 6519ad9c82549817d797a5d9d463a418eb35273f (patch) | |
| tree | fa15449dc6f52c755f5a43404b901948338af0ed /mumd | |
| parent | d6779ca065a896d329a7634d69a5f4270d829b73 (diff) | |
| download | mum-6519ad9c82549817d797a5d9d463a418eb35273f.tar.gz | |
fix deadlock and change message registering properly
Diffstat (limited to 'mumd')
| -rw-r--r-- | mumd/src/network/tcp.rs | 2 | ||||
| -rw-r--r-- | mumd/src/state.rs | 20 |
2 files changed, 12 insertions, 10 deletions
diff --git a/mumd/src/network/tcp.rs b/mumd/src/network/tcp.rs index b6e939a..b513797 100644 --- a/mumd/src/network/tcp.rs +++ b/mumd/src/network/tcp.rs @@ -299,6 +299,8 @@ async fn listen( notifications::send(format!("{}: {}", user, msg.get_message())); //TODO: probably want a config flag for this } state.register_message((msg.get_message().to_owned(), msg.get_actor())); + drop(state); + event_queue.resolve(TcpEventData::TextMessage(&*msg)); } ControlPacket::CryptSetup(msg) => { debug!("Crypt setup"); diff --git a/mumd/src/state.rs b/mumd/src/state.rs index 483f915..fba6ab0 100644 --- a/mumd/src/state.rs +++ b/mumd/src/state.rs @@ -612,16 +612,6 @@ pub fn handle_command( } Command::PastMessages { block } => { if block { - let messages = std::mem::take(&mut state.message_buffer); - let server = match state.server.as_ref() { - Some(s) => s, - None => return now!(Err(Error::Disconnected)), - }; - let messages = messages.into_iter() - .map(|(msg, user)| (msg, server.users().get(&user).unwrap().name().to_string())).collect(); - - now!(Ok(Some(CommandResponse::PastMessages { messages }))) - } else { let ref_state = Arc::clone(&og_state); ExecutionContext::TcpEventSubscriber( TcpEvent::TextMessage, @@ -637,6 +627,16 @@ pub fn handle_command( } }), ) + } else { + let messages = std::mem::take(&mut state.message_buffer); + let server = match state.server.as_ref() { + Some(s) => s, + None => return now!(Err(Error::Disconnected)), + }; + let messages = messages.into_iter() + .map(|(msg, user)| (msg, server.users().get(&user).unwrap().name().to_string())).collect(); + + now!(Ok(Some(CommandResponse::PastMessages { messages }))) } } Command::SendMessage { message, targets } => { |
