aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-03-27 08:27:14 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-03-27 08:27:14 +0400
commit571768af433b0fdc653f44b7dee0ad2dda6fe344 (patch)
treec022de422f89507444b60108abe60761db1bc7dc /src
parentc09d5eb0487dd54d36e938978815d61aaeff58e1 (diff)
downloadniri-571768af433b0fdc653f44b7dee0ad2dda6fe344.tar.gz
niri-571768af433b0fdc653f44b7dee0ad2dda6fe344.tar.bz2
niri-571768af433b0fdc653f44b7dee0ad2dda6fe344.zip
Make ipc_outputs Arc Mutex
Diffstat (limited to 'src')
-rw-r--r--src/backend/mod.rs4
-rw-r--r--src/backend/tty.rs9
-rw-r--r--src/backend/winit.rs16
-rw-r--r--src/ipc/server.rs7
4 files changed, 18 insertions, 18 deletions
diff --git a/src/backend/mod.rs b/src/backend/mod.rs
index ec00b10b..fe181714 100644
--- a/src/backend/mod.rs
+++ b/src/backend/mod.rs
@@ -1,6 +1,4 @@
-use std::cell::RefCell;
use std::collections::HashMap;
-use std::rc::Rc;
use std::sync::{Arc, Mutex};
use std::time::Duration;
@@ -112,7 +110,7 @@ impl Backend {
}
}
- pub fn ipc_outputs(&self) -> Rc<RefCell<HashMap<String, niri_ipc::Output>>> {
+ pub fn ipc_outputs(&self) -> Arc<Mutex<HashMap<String, niri_ipc::Output>>> {
match self {
Backend::Tty(tty) => tty.ipc_outputs(),
Backend::Winit(winit) => winit.ipc_outputs(),
diff --git a/src/backend/tty.rs b/src/backend/tty.rs
index 6e923003..f9f4b19d 100644
--- a/src/backend/tty.rs
+++ b/src/backend/tty.rs
@@ -84,7 +84,7 @@ pub struct Tty {
update_output_config_on_resume: bool,
// Whether the debug tinting is enabled.
debug_tint: bool,
- ipc_outputs: Rc<RefCell<HashMap<String, niri_ipc::Output>>>,
+ ipc_outputs: Arc<Mutex<HashMap<String, niri_ipc::Output>>>,
enabled_outputs: Arc<Mutex<HashMap<String, Output>>>,
}
@@ -292,7 +292,7 @@ impl Tty {
dmabuf_global: None,
update_output_config_on_resume: false,
debug_tint: false,
- ipc_outputs: Rc::new(RefCell::new(HashMap::new())),
+ ipc_outputs: Arc::new(Mutex::new(HashMap::new())),
enabled_outputs: Arc::new(Mutex::new(HashMap::new())),
})
}
@@ -1410,10 +1410,11 @@ impl Tty {
}
}
- self.ipc_outputs.replace(ipc_outputs);
+ let mut guard = self.ipc_outputs.lock().unwrap();
+ *guard = ipc_outputs;
}
- pub fn ipc_outputs(&self) -> Rc<RefCell<HashMap<String, niri_ipc::Output>>> {
+ pub fn ipc_outputs(&self) -> Arc<Mutex<HashMap<String, niri_ipc::Output>>> {
self.ipc_outputs.clone()
}
diff --git a/src/backend/winit.rs b/src/backend/winit.rs
index d23ba649..b2ab8c33 100644
--- a/src/backend/winit.rs
+++ b/src/backend/winit.rs
@@ -27,7 +27,7 @@ pub struct Winit {
output: Output,
backend: WinitGraphicsBackend<GlesRenderer>,
damage_tracker: OutputDamageTracker,
- ipc_outputs: Rc<RefCell<HashMap<String, niri_ipc::Output>>>,
+ ipc_outputs: Arc<Mutex<HashMap<String, niri_ipc::Output>>>,
enabled_outputs: Arc<Mutex<HashMap<String, Output>>>,
}
@@ -60,7 +60,7 @@ impl Winit {
output.set_preferred(mode);
let physical_properties = output.physical_properties();
- let ipc_outputs = Rc::new(RefCell::new(HashMap::from([(
+ let ipc_outputs = Arc::new(Mutex::new(HashMap::from([(
"winit".to_owned(),
niri_ipc::Output {
name: output.name(),
@@ -97,10 +97,12 @@ impl Winit {
None,
);
- let mut ipc_outputs = winit.ipc_outputs.borrow_mut();
- let mode = &mut ipc_outputs.get_mut("winit").unwrap().modes[0];
- mode.width = size.w.clamp(0, u16::MAX as i32) as u16;
- mode.height = size.h.clamp(0, u16::MAX as i32) as u16;
+ {
+ let mut ipc_outputs = winit.ipc_outputs.lock().unwrap();
+ let mode = &mut ipc_outputs.get_mut("winit").unwrap().modes[0];
+ mode.width = size.w.clamp(0, u16::MAX as i32) as u16;
+ mode.height = size.h.clamp(0, u16::MAX as i32) as u16;
+ }
state.niri.output_resized(&winit.output);
}
@@ -228,7 +230,7 @@ impl Winit {
}
}
- pub fn ipc_outputs(&self) -> Rc<RefCell<HashMap<String, niri_ipc::Output>>> {
+ pub fn ipc_outputs(&self) -> Arc<Mutex<HashMap<String, niri_ipc::Output>>> {
self.ipc_outputs.clone()
}
diff --git a/src/ipc/server.rs b/src/ipc/server.rs
index a1f3905b..102fcb94 100644
--- a/src/ipc/server.rs
+++ b/src/ipc/server.rs
@@ -1,8 +1,7 @@
-use std::cell::RefCell;
use std::collections::HashMap;
use std::os::unix::net::{UnixListener, UnixStream};
use std::path::PathBuf;
-use std::rc::Rc;
+use std::sync::{Arc, Mutex};
use std::{env, io, process};
use anyhow::Context;
@@ -23,7 +22,7 @@ pub struct IpcServer {
struct ClientCtx {
event_loop: LoopHandle<'static, State>,
- ipc_outputs: Rc<RefCell<HashMap<String, niri_ipc::Output>>>,
+ ipc_outputs: Arc<Mutex<HashMap<String, niri_ipc::Output>>>,
}
impl IpcServer {
@@ -126,7 +125,7 @@ fn process(ctx: &ClientCtx, buf: &str) -> anyhow::Result<Response> {
let response = match request {
Request::Outputs => {
- let ipc_outputs = ctx.ipc_outputs.borrow().clone();
+ let ipc_outputs = ctx.ipc_outputs.lock().unwrap().clone();
Response::Outputs(ipc_outputs)
}
Request::Action(action) => {