aboutsummaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-09-09 19:58:25 +0200
committermetamuffin <metamuffin@disroot.org>2022-09-09 19:58:25 +0200
commita748325cd48adcd7a4cf4775cc3812e1a2dbe630 (patch)
tree793ee8e283133186fc81141e6ef38fd1c7d04d41 /server/src
parent8c969b3367f86506707aa42102a030f99475b0eb (diff)
downloadkeks-meet-a748325cd48adcd7a4cf4775cc3812e1a2dbe630.tar
keks-meet-a748325cd48adcd7a4cf4775cc3812e1a2dbe630.tar.bz2
keks-meet-a748325cd48adcd7a4cf4775cc3812e1a2dbe630.tar.zst
fix deadlock
Diffstat (limited to 'server/src')
-rw-r--r--server/src/main.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/server/src/main.rs b/server/src/main.rs
index f920013..9f5cb91 100644
--- a/server/src/main.rs
+++ b/server/src/main.rs
@@ -104,14 +104,20 @@ fn signaling_connect(rname: String, rooms: Rooms, ws: warp::ws::Ws) -> impl Repl
debug!("ws upgrade");
let guard = rooms.read().await;
let room = match guard.get(&rname) {
- Some(r) => r.to_owned(),
+ Some(r) => {
+ let x = r.to_owned();
+ drop(guard);
+ x
+ }
None => {
debug!("aquire lock for insertion");
drop(guard); // make sure read-lock is dropped to avoid deadlock
let mut guard = rooms.write().await;
debug!("create new room");
guard.insert(rname.to_owned(), Default::default());
- guard.get(&rname).unwrap().to_owned() // TODO never expect this to always work!!
+ let x = guard.get(&rname).unwrap().to_owned();
+ drop(guard);
+ x
}
};