diff --git a/src/cache.rs b/src/cache.rs index 040ec373d0a66e5b19ad85dbf5eae3f51b1f69a4..db9a71a6e694264c42e650faede7c142ea2c1797 100644 --- a/src/cache.rs +++ b/src/cache.rs @@ -17,7 +17,7 @@ use crate::BASE_NAME; use lazy_static::lazy_static; use std::collections::HashMap; -use std::sync::{Mutex, MutexGuard}; +use std::sync::{RwLock, RwLockReadGuard}; use libc::{geteuid, seteuid, getpwnam, uid_t}; use std::ffi::{CStr, CString}; @@ -144,7 +144,7 @@ impl Cache { } } - pub fn load_user_token(&mut self, owner: &String) -> Option<&BasicTokenResponse> { + pub fn load_user_token(&self, owner: &String) -> Option<&BasicTokenResponse> { if !self.user_tokens.contains_key(owner) { debug!("No token for {} in memory, trying to load from file", owner); @@ -160,7 +160,7 @@ impl Cache { match new_token { Some(t) => { - self.user_tokens.insert(owner.to_string(), t); + CACHE.write().unwrap().user_tokens.insert(owner.to_string(), t); self.user_tokens.get(owner) }, None => None @@ -171,8 +171,8 @@ impl Cache { } } - pub fn save_user_token(&mut self, owner: &String, token: BasicTokenResponse) -> Result<(), io::Error> { - self.user_tokens.insert(owner.to_string(), token.clone()); + pub fn save_user_token(&self, owner: &String, token: BasicTokenResponse) -> Result<(), io::Error> { + CACHE.write().unwrap().user_tokens.insert(owner.to_string(), token.clone()); debug!("Saved token for {} in memory", owner); // Try to write user's token cache file @@ -190,8 +190,8 @@ impl Cache { return res; } - pub fn delete_user_token(&mut self, owner: &String) { - self.user_tokens.remove(owner); + pub fn delete_user_token(&self, owner: &String) { + CACHE.write().unwrap().user_tokens.remove(owner); debug!("Token for {} removed from memory", owner); // Try to remove user's token cache file @@ -227,9 +227,9 @@ fn save_json<O: Serialize>(path: PathBuf, obj: O) -> Result<(), io::Error> { } lazy_static! { - static ref CACHE: Mutex<Cache> = Mutex::new(Cache::new()); + static ref CACHE: RwLock<Cache> = RwLock::new(Cache::new()); } -pub fn get_cache() -> MutexGuard<'static, Cache> { - CACHE.lock().unwrap() +pub fn get_cache() -> RwLockReadGuard<'static, Cache> { + CACHE.read().unwrap() }