diff --git a/src/function/eval.rs b/src/function/eval.rs index 24a0e7e..589b036 100644 --- a/src/function/eval.rs +++ b/src/function/eval.rs @@ -1,3 +1,4 @@ +use std::collections::HashMap; use std::ffi::OsStr; use std::fs::{read_dir, DirEntry, File}; use std::hash::Hasher; @@ -208,10 +209,14 @@ fn evaluate_checksum(state: &State, file_path: &Path, crc: u32) -> Result Result<(), PoisonError>>> { - let mut writer = self.crc_cache.write()?; + let mut writer = self.crc_cache.write().unwrap_or_else(|mut e| { + **e.get_mut() = HashMap::new(); + self.crc_cache.clear_poison(); + e.into_inner() + }); writer.deref_mut().clear(); writer.deref_mut().extend( @@ -132,7 +136,13 @@ impl State { pub fn clear_condition_cache( &mut self, ) -> Result<(), PoisonError>>> { - self.condition_cache.write().map(|mut c| c.clear()) + let mut writer = self.condition_cache.write().unwrap_or_else(|mut e| { + **e.get_mut() = HashMap::new(); + self.crc_cache.clear_poison(); + e.into_inner() + }); + writer.clear(); + Ok(()) } pub fn set_additional_data_paths(&mut self, additional_data_paths: Vec) {