summaryrefslogtreecommitdiff
path: root/ofborg/tickborg/src/locks.rs
blob: d1d2ee4788875e9632a3d41042c2f1f15d17c0f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use fs2::FileExt;

use std::fs;
use std::io::Error;
use std::path::PathBuf;

pub trait Lockable {
    fn lock_path(&self) -> PathBuf;

    fn lock(&self) -> Result<Lock, Error> {
        let lock = fs::File::create(self.lock_path())?;
        lock.lock_exclusive()?;
        Ok(Lock { lock: Some(lock) })
    }
}

pub struct Lock {
    lock: Option<fs::File>,
}

impl Lock {
    pub fn unlock(&mut self) {
        self.lock = None
    }
}