#[cfg(windows)]
pub mod windows {
use core::ops::Deref;
use std::fs::File;
use std::path::Path;
use cluFlock::ExclusiveFlock;
struct AutoRemoveFile<'a>(&'a Path, File);
impl<'a> AutoRemoveFile<'a> {
pub fn file_create(path: &'a Path) -> Self {
AutoRemoveFile(path, File::create(path).unwrap())
}
}
impl<'a> Deref for AutoRemoveFile<'a> {
type Target = File;
#[inline(always)]
fn deref(&self) -> &Self::Target {
&self.1
}
}
impl<'a> Drop for AutoRemoveFile<'a> {
#[inline]
fn drop(&mut self) {
std::fs::remove_file(self.0).unwrap();
}
}
#[test]
fn windows_two_lock_behavior_onprocess() {
let file = AutoRemoveFile::file_create(Path::new("./del_windows_two_lock_behavior_onprocess"));
if let Err(e) = ExclusiveFlock::wait_lock(&*file) {
panic!("Different platform behavior expected. {:?}", e);
}
let one_exclusive = ExclusiveFlock::wait_lock(&*file);
let one_exclusive2 = ExclusiveFlock::try_lock(&*file);
let one_exclusive3 = ExclusiveFlock::try_lock(&*file);
if let Err(e) = one_exclusive { panic!("Different platform behavior expected. {:?}", e);
}
if let Ok(e) = one_exclusive2 { panic!("Different platform behavior expected. {:?}", e);
}
if let Ok(e) = one_exclusive3 { panic!("Different platform behavior expected. {:?}", e);
}
drop(one_exclusive);
drop(one_exclusive2);
drop(one_exclusive3);
}
}