summaryrefslogtreecommitdiffstats
path: root/src/files.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/files.rs')
-rw-r--r--src/files.rs33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/files.rs b/src/files.rs
index de00a28..f78f067 100644
--- a/src/files.rs
+++ b/src/files.rs
@@ -60,7 +60,7 @@ pub fn start_ticking(sender: Sender<Events>) {
use std::time::Duration;
IOTICK_CLIENTS.fetch_add(1, Ordering::Relaxed);
- if IOTICK_CLIENTS.load(Ordering::Acquire) == 1 {
+ if IOTICK_CLIENTS.load(Ordering::Relaxed) == 1 {
std::thread::spawn(move || {
IOTICK.store(0, Ordering::Relaxed);
@@ -76,7 +76,7 @@ pub fn start_ticking(sender: Sender<Events>) {
.unwrap();
// All jobs done?
- if IOTICK_CLIENTS.load(Ordering::Acquire) == 0 {
+ if IOTICK_CLIENTS.load(Ordering::Relaxed) == 0 {
IOTICK.store(0, Ordering::Relaxed);
return;
}
@@ -1647,3 +1647,32 @@ impl File {
self.path.short_string()
}
}
+
+
+
+// Small wrapper that simplifies stopping with more complex control flow
+pub struct Ticker {
+ invalidated: bool
+}
+
+impl Ticker {
+ pub fn start_ticking(sender: Sender<Events>) -> Self {
+ start_ticking(sender);
+ Ticker {
+ invalidated: false
+ }
+ }
+
+ pub fn stop_ticking(&mut self) {
+ stop_ticking();
+ self.invalidated = true;
+ }
+}
+
+impl Drop for Ticker {
+ fn drop(&mut self) {
+ if !self.invalidated {
+ self.stop_ticking();
+ }
+ }
+}