diff options
| author | Rubens Brandao <git@rubens.io> | 2021-04-06 20:18:55 +0200 |
|---|---|---|
| committer | Rubens Brandao <git@rubens.io> | 2021-04-06 20:18:55 +0200 |
| commit | e01383af1c417666d42a802e44a1d1e98bbcf14e (patch) | |
| tree | e4a53b7976e7353b879dc76f7e6ab1846a4105e0 /mumd/src/network | |
| parent | 48f0d381b0b9a5e8a81e4a62a4912865a3081af6 (diff) | |
| download | mum-e01383af1c417666d42a802e44a1d1e98bbcf14e.tar.gz | |
Fix the import location and a possible deadlock
Diffstat (limited to 'mumd/src/network')
| -rw-r--r-- | mumd/src/network/tcp.rs | 20 | ||||
| -rw-r--r-- | mumd/src/network/udp.rs | 4 |
2 files changed, 14 insertions, 10 deletions
diff --git a/mumd/src/network/tcp.rs b/mumd/src/network/tcp.rs index 93b5103..02477dc 100644 --- a/mumd/src/network/tcp.rs +++ b/mumd/src/network/tcp.rs @@ -10,10 +10,10 @@ use mumble_protocol::control::{msgs, ClientControlCodec, ControlCodec, ControlPa use mumble_protocol::crypt::ClientCryptState; use mumble_protocol::voice::VoicePacket; use mumble_protocol::{Clientbound, Serverbound}; -use std::{collections::HashMap, sync::RwLock}; +use std::collections::HashMap; use std::convert::{Into, TryInto}; use std::net::SocketAddr; -use std::sync::Arc; +use std::sync::{Arc, RwLock}; use tokio::net::TcpStream; use tokio::sync::{mpsc, watch, Mutex}; use tokio::time::{self, Duration}; @@ -103,13 +103,17 @@ pub async fn handle( .await?; // Handshake (omitting `Version` message for brevity) - let state_lock = state.read().unwrap(); - let username = state_lock.username().unwrap().to_string(); - let password = state_lock.password().map(|x| x.to_string()); + let (username, password) = { + let state_lock = state.read().unwrap(); + (state_lock.username().unwrap().to_string(), + state_lock.password().map(|x| x.to_string())) + }; authenticate(&mut sink, username, password).await?; - let phase_watcher = state_lock.phase_receiver(); - let input_receiver = state_lock.audio().input_receiver(); - drop(state_lock); + let (phase_watcher, input_receiver) = { + let state_lock = state.read().unwrap(); + (state_lock.phase_receiver(), + state_lock.audio().input_receiver()) + }; let event_queue = TcpEventQueue::new(); info!("Logging in..."); diff --git a/mumd/src/network/udp.rs b/mumd/src/network/udp.rs index 1b5c373..cc085b5 100644 --- a/mumd/src/network/udp.rs +++ b/mumd/src/network/udp.rs @@ -9,12 +9,12 @@ use mumble_protocol::crypt::ClientCryptState; use mumble_protocol::ping::{PingPacket, PongPacket}; use mumble_protocol::voice::VoicePacket; use mumble_protocol::Serverbound; -use std::{collections::HashMap, sync::RwLock}; +use std::collections::HashMap; use std::convert::TryFrom; use std::net::{Ipv6Addr, SocketAddr}; use std::rc::Rc; use std::sync::atomic::{AtomicU64, Ordering}; -use std::sync::Arc; +use std::sync::{Arc, RwLock}; use tokio::{join, net::UdpSocket}; use tokio::sync::{mpsc, watch, Mutex}; use tokio::time::{interval, Duration}; |
