Fix double borrow mut in CachedOnDiskCorpus (#347)

This commit is contained in:
Andrea Fioraldi 2021-11-04 17:49:07 +01:00 committed by GitHub
parent 28c5e59fb2
commit f0daeb377e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -66,20 +66,19 @@ where
let testcase = { self.inner.get(idx)? }; let testcase = { self.inner.get(idx)? };
if testcase.borrow().input().is_none() { if testcase.borrow().input().is_none() {
let _ = testcase.borrow_mut().load_input()?; let _ = testcase.borrow_mut().load_input()?;
let current = *self.current(); let mut borrowed_num = 0;
while self.cached_indexes.borrow().len() >= self.cache_max_len { while self.cached_indexes.borrow().len() >= self.cache_max_len {
let removed = self.cached_indexes.borrow_mut().pop_front().unwrap(); let removed = self.cached_indexes.borrow_mut().pop_front().unwrap();
if let Some(cur) = current { if let Ok(mut borrowed) = self.inner.get(removed)?.try_borrow_mut() {
if cur == removed { *borrowed.input_mut() = None;
self.cached_indexes.borrow_mut().push_back(cur); } else {
if self.cache_max_len == 1 { self.cached_indexes.borrow_mut().push_back(removed);
borrowed_num += 1;
if self.cache_max_len == borrowed_num {
break; break;
} }
continue;
} }
} }
*self.inner.get(removed)?.borrow_mut().input_mut() = None;
}
self.cached_indexes.borrow_mut().push_back(idx); self.cached_indexes.borrow_mut().push_back(idx);
} }
Ok(testcase) Ok(testcase)