diff --git a/crates/pdftract-core/src/source/mmap.rs b/crates/pdftract-core/src/source/mmap.rs index c95cf84..64b7acd 100644 --- a/crates/pdftract-core/src/source/mmap.rs +++ b/crates/pdftract-core/src/source/mmap.rs @@ -177,6 +177,7 @@ mod tests { use super::*; use std::fs; use std::io::Write; + use std::sync::Arc; use std::thread; use tempfile::NamedTempFile; @@ -335,14 +336,14 @@ mod tests { let content = b"0123456789"; temp_file.write_all(content).unwrap(); - let source = MmapSource::open(temp_file.path()).unwrap(); + let source = Arc::new(MmapSource::open(temp_file.path()).unwrap()); // Spawn multiple threads reading concurrently let handles: Vec<_> = (0..4) .map(|i| { - let source_ref = &source; + let source_clone = Arc::clone(&source); thread::spawn(move || { - let bytes = source_ref.read_range(i as u64, 2).unwrap(); + let bytes = source_clone.read_range(i as u64, 2).unwrap(); bytes.to_vec() }) }) @@ -434,7 +435,7 @@ mod tests { #[test] fn test_empty_file() { let temp_file = NamedTempFile::new().unwrap(); - let source = MmapSource::open(temp_file.path()).unwrap(); + let mut source = MmapSource::open(temp_file.path()).unwrap(); assert_eq!(source.len(), 0); let mut buf = [0u8; 10]; diff --git a/notes/pdftract-1psmn.md b/notes/pdftract-1psmn.md index b2f9e6b..7f2aed1 100644 --- a/notes/pdftract-1psmn.md +++ b/notes/pdftract-1psmn.md @@ -25,7 +25,12 @@ Implemented FileSource as a PdfSource fallback for when memory-mapping is not av - `test_large_file`: Handles 100KB file - `test_read_mixed_with_seek`: Tests mixed read/seek operations -### 2. crates/pdftract-core/Cargo.toml +### 2. crates/pdftract-core/src/source/mmap.rs (test fixes) +- Added `std::sync::Arc` import for thread sharing +- Fixed lifetime issue in `test_sync_multiple_threads` by using Arc instead of `&source` +- Added `mut` to source in `test_empty_file` for Read trait compatibility + +### 3. crates/pdftract-core/Cargo.toml - Added `parking_lot = "0.12"` dependency ## Acceptance Criteria