From ca02789996b94db87cd84571edb42bbcd9a3a18b Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 15 Mar 2025 15:24:25 +0100 Subject: fix inefficient multi readers --- src/unityfs/multi_reader.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/unityfs/multi_reader.rs') diff --git a/src/unityfs/multi_reader.rs b/src/unityfs/multi_reader.rs index 3de6cd5..64e1670 100644 --- a/src/unityfs/multi_reader.rs +++ b/src/unityfs/multi_reader.rs @@ -1,10 +1,11 @@ +use anyhow::Result; +use log::trace; use std::{ io::{Read, Seek, SeekFrom}, sync::{Arc, Mutex}, }; -use anyhow::Result; - +/// Splits an reader into many by seeking in between reads. pub struct MultiReader { position: u64, inner: Arc>, @@ -30,7 +31,12 @@ impl Read for MultiReader { fn read(&mut self, buf: &mut [u8]) -> std::io::Result { let mut g = self.inner.lock().unwrap(); if g.0 != self.position { + trace!( + "seeking to match stream position ({} actual vs {} required)", + g.0, self.position + ); g.1.seek(SeekFrom::Start(self.position))?; + g.0 = self.position; } let size = g.1.read(buf)?; g.0 += size as u64; -- cgit v1.2.3-70-g09d2