Fixing a deadlock in working_copy::memory (used only in tests for now)
[?]
Apr 29, 2021, 2:31 PM
MOPABMFWZOEMCIQMLEFH74NGTFV6K26FGUFETV3FG5VHCBGLXDIQCDependencies
- [2]
I24UEJQLVarious post-fire fixes - [3]
VO5OQW4WRemoving anyhow in libpijul - [4]
X7OHUPL5Fixing a bug in unrecord, and fixing the tests - [5]
SXEYMYF7Fixing the bad changes in history (unfortunately, by rebooting).
Change contents
- replacement in libpijul/src/working_copy/memory.rs at line 77
pub fn add_file(&mut self, file: &str, file_contents: Vec<u8>) {pub fn add_file(&self, file: &str, file_contents: Vec<u8>) { - replacement in libpijul/src/working_copy/memory.rs at line 90
pub fn add_dir(&mut self, file: &str) {pub fn add_dir(&self, file: &str) { - replacement in libpijul/src/working_copy/memory.rs at line 218
let m = self.0.lock().unwrap();if m.get_file(file).is_none() {let not_already_exists = {let m = self.0.lock().unwrap();m.get_file(file).is_none()};if not_already_exists { - replacement in libpijul/src/working_copy/memory.rs at line 272
let mut m = self.0.lock().unwrap();if let Some(inode) = m.remove_path_(old) {let inode = {let mut m = self.0.lock().unwrap();m.remove_path_(old)};if let Some(inode) = inode { - replacement in libpijul/src/working_copy/memory.rs at line 299
match m.get_file_mut(file) {Some(Inode::File {ref mut contents, ..}) => {if let Some(f) = m.get_file_mut(file) {if let Inode::File { ref mut contents, .. } = f { - replacement in libpijul/src/working_copy/memory.rs at line 302
Ok(Writer {return Ok(Writer { - replacement in libpijul/src/working_copy/memory.rs at line 305[3.3127]→[3.208321:208357](∅→∅),[2.27111]→[3.208321:208357](∅→∅),[3.208321]→[3.208321:208357](∅→∅),[3.208357]→[2.27112:27177](∅→∅),[2.27177]→[3.208404:208459](∅→∅),[3.208404]→[3.208404:208459](∅→∅),[3.3199]→[3.208507:208599](∅→∅),[3.208507]→[3.208507:208599](∅→∅),[3.208599]→[3.400:460](∅→∅),[3.460]→[2.27178:27230](∅→∅),[2.27230]→[3.208697:208778](∅→∅),[3.208697]→[3.208697:208778](∅→∅),[3.208778]→[2.27231:27274](∅→∅)
}None => {let contents = Arc::new(Mutex::new(Vec::new()));let last_modified = SystemTime::now();self.add_inode(file,Inode::File {meta: InodeMetadata::new(0, false),contents: contents.clone(),last_modified,},);Ok(Writer { w: contents })} else {unreachable!() - edit in libpijul/src/working_copy/memory.rs at line 308
_ => panic!("not a file: {:?}", file), - edit in libpijul/src/working_copy/memory.rs at line 309
std::mem::drop(m);let contents = Arc::new(Mutex::new(Vec::new()));let last_modified = SystemTime::now();self.add_inode(file,Inode::File {meta: InodeMetadata::new(0, false),contents: contents.clone(),last_modified,},);Ok(Writer { w: contents })