aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeer <himbeerserverde@gmail.com>2024-02-23 17:11:02 +0100
committerHimbeer <himbeerserverde@gmail.com>2024-02-23 17:11:02 +0100
commitaf1ba944474e8ade1d65c70aa37ee5f121dadfba (patch)
tree79946312e824a0fb1ffa7ac8492aeddf32a672b0
parent0ee784abc8ba2329c92c78ba470c0ec66928bda7 (diff)
only ever lock stream_conn immutably
fixes rx deadlock
-rw-r--r--hbak_common/src/conn.rs6
1 files changed, 3 insertions, 3 deletions
diff --git a/hbak_common/src/conn.rs b/hbak_common/src/conn.rs
index 3f84fa7..736705c 100644
--- a/hbak_common/src/conn.rs
+++ b/hbak_common/src/conn.rs
@@ -24,7 +24,7 @@ use crate::{NetworkError, RemoteError};
use std::io::{self, BufReader, BufWriter, Read, Write};
use std::marker::PhantomData;
use std::net::{SocketAddr, TcpStream};
-use std::ops::DerefMut;
+use std::ops::{Deref, DerefMut};
use std::sync::{Arc, Mutex, RwLock};
use std::thread;
use std::time::Duration;
@@ -375,7 +375,7 @@ impl StreamConn<Active> {
let mut stream = None;
let start_streaming = Arc::new(Mutex::new(false));
- let mut handle = |stream_conn: &mut Self,
+ let mut handle = |stream_conn: &Self,
message: StreamMessage|
-> Result<bool, NetworkError> {
match message {
@@ -501,7 +501,7 @@ impl StreamConn<Active> {
Err(e) => return Err(e),
};
- if handle(&mut stream_conn.write().unwrap(), message)? {
+ if handle(stream_conn.read().unwrap().deref(), message)? {
remote_done = true;
}
}