diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-03-27 08:27:14 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-03-27 08:27:14 +0400 |
| commit | 571768af433b0fdc653f44b7dee0ad2dda6fe344 (patch) | |
| tree | c022de422f89507444b60108abe60761db1bc7dc /src | |
| parent | c09d5eb0487dd54d36e938978815d61aaeff58e1 (diff) | |
| download | niri-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.rs | 4 | ||||
| -rw-r--r-- | src/backend/tty.rs | 9 | ||||
| -rw-r--r-- | src/backend/winit.rs | 16 | ||||
| -rw-r--r-- | src/ipc/server.rs | 7 |
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) => { |
