diff options
| author | Kunal Mohan <kunalmohan99@gmail.com> | 2021-03-23 18:25:31 +0530 |
|---|---|---|
| committer | Kunal Mohan <kunalmohan99@gmail.com> | 2021-05-04 20:47:52 +0530 |
| commit | bbcea3198892cb005d551a4c3b90c1f02712ace7 (patch) | |
| tree | ecdb346c3bc699d010d0d939749973ebef4ca21c /src/common/command_is_executing.rs | |
| parent | Hide IpcChannel entirely behind OsApi (diff) | |
| download | sl0ppij-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.rs | 20 |
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(); + } + } } |
