1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use crate::imp::filesys::save_cache_item::SaveCacheItem;
use std::sync::atomic::Ordering;
use std::sync::MutexGuard;
pub(crate) struct DocchiMutex<'a>{
_guard: MutexGuard<'a, ()>,
cache: &'a SaveCacheItem,
}
impl<'a> DocchiMutex<'a>{
pub(crate) fn new<'b>(guard : MutexGuard<'b, ()>,
cache : &'b SaveCacheItem) -> DocchiMutex<'b>{
cache.queued_atomic().fetch_add(1, Ordering::Relaxed);
DocchiMutex { _guard: guard, cache }
}
pub(crate) fn cache(&self) -> &SaveCacheItem{ self.cache }
}
impl<'a> Drop for DocchiMutex<'a>{
fn drop(&mut self) {
self.cache().queued_atomic().fetch_sub(1, Ordering::Relaxed);
}
}