aboutsummaryrefslogtreecommitdiffstats
path: root/src/common/command_is_executing.rs
diff options
context:
space:
mode:
authorKunal Mohan <kunalmohan99@gmail.com>2021-03-23 18:25:31 +0530
committerKunal Mohan <kunalmohan99@gmail.com>2021-05-04 20:47:52 +0530
commitbbcea3198892cb005d551a4c3b90c1f02712ace7 (patch)
treeecdb346c3bc699d010d0d939749973ebef4ca21c /src/common/command_is_executing.rs
parentHide IpcChannel entirely behind OsApi (diff)
downloadsl0ppij-bbcea3198892cb005d551a4c3b90c1f02712ace7.tar.gz
sl0ppij-bbcea3198892cb005d551a4c3b90c1f02712ace7.tar.xz
sl0ppij-bbcea3198892cb005d551a4c3b90c1f02712ace7.zip
Synchronize update tabs actions using command_is_executing
Diffstat (limited to 'src/common/command_is_executing.rs')
-rw-r--r--src/common/command_is_executing.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/common/command_is_executing.rs b/src/common/command_is_executing.rs
index 775a7bfc..fdce0429 100644
--- a/src/common/command_is_executing.rs
+++ b/src/common/command_is_executing.rs
@@ -5,6 +5,7 @@ use std::sync::{Arc, Condvar, Mutex};
pub struct CommandIsExecuting {
opening_new_pane: Arc<(Mutex<bool>, Condvar)>,
closing_pane: Arc<(Mutex<bool>, Condvar)>,
+ updating_tabs: Arc<(Mutex<bool>, Condvar)>,
}
impl CommandIsExecuting {
@@ -12,6 +13,7 @@ impl CommandIsExecuting {
CommandIsExecuting {
opening_new_pane: Arc::new((Mutex::new(false), Condvar::new())),
closing_pane: Arc::new((Mutex::new(false), Condvar::new())),
+ updating_tabs: Arc::new((Mutex::new(false), Condvar::new())),
}
}
pub fn closing_pane(&mut self) {
@@ -36,6 +38,17 @@ impl CommandIsExecuting {
*opening_new_pane = false;
cvar.notify_all();
}
+ pub fn updating_tabs(&mut self) {
+ let (lock, _cvar) = &*self.updating_tabs;
+ let mut updating_tabs = lock.lock().unwrap();
+ *updating_tabs = true;
+ }
+ pub fn done_updating_tabs(&self) {
+ let (lock, cvar) = &*self.updating_tabs;
+ let mut updating_tabs = lock.lock().unwrap();
+ *updating_tabs = false;
+ cvar.notify_one();
+ }
pub fn wait_until_pane_is_closed(&self) {
let (lock, cvar) = &*self.closing_pane;
let mut closing_pane = lock.lock().unwrap();
@@ -50,4 +63,11 @@ impl CommandIsExecuting {
opening_new_pane = cvar.wait(opening_new_pane).unwrap();
}
}
+ pub fn wait_until_tabs_are_updated(&self) {
+ let (lock, cvar) = &*self.updating_tabs;
+ let mut updating_tabs = lock.lock().unwrap();
+ while *updating_tabs {
+ updating_tabs = cvar.wait(updating_tabs).unwrap();
+ }
+ }
}