rocket/util/
unix.rs

1use std::io;
2use std::os::fd::AsRawFd;
3
4pub fn lock_exclusive_nonblocking<T: AsRawFd>(file: &T) -> io::Result<()> {
5    let raw_fd = file.as_raw_fd();
6    let res = unsafe {
7        libc::flock(raw_fd, libc::LOCK_EX | libc::LOCK_NB)
8    };
9
10    match res {
11        0 => Ok(()),
12        _ => Err(io::Error::last_os_error()),
13    }
14}
15
16pub fn unlock_nonblocking<T: AsRawFd>(file: &T) -> io::Result<()> {
17    let res = unsafe {
18        libc::flock(file.as_raw_fd(), libc::LOCK_UN | libc::LOCK_NB)
19    };
20
21    match res {
22        0 => Ok(()),
23        _ => Err(io::Error::last_os_error()),
24    }
25}