diff --git a/Cargo.toml b/Cargo.toml index 4686486..e4db50f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bdflib" -version = "0.3.0" +version = "0.3.1" authors = ["trivernis "] edition = "2018" license-file = "LICENSE" diff --git a/src/io.rs b/src/io.rs index e284993..3381b5f 100644 --- a/src/io.rs +++ b/src/io.rs @@ -93,19 +93,21 @@ impl BDFWriter { /// Starts threads for parallel chunk compression pub fn start_threads(&self) { for _ in 0..num_cpus::get() { - let r = self.thread_manager.receiver_work.clone(); - let s = self.thread_manager.sender_result.clone(); - let wg: WaitGroup = self.thread_manager.wg.clone(); let compress = self.compressed; let compression_level = self.compression_level; - thread::spawn(move || { - for mut chunk in r.iter() { - if compress { - chunk.compress(compression_level).expect("failed to compress chunk"); + thread::spawn({ + let r = self.thread_manager.receiver_work.clone(); + let s = self.thread_manager.sender_result.clone(); + let wg: WaitGroup = self.thread_manager.wg.clone(); + move || { + for mut chunk in r { + if compress { + chunk.compress(compression_level).expect("failed to compress chunk"); + } + s.send(chunk.serialize()).expect("failed to send result"); } - s.send(chunk.serialize()).expect("failed to send result"); + drop(wg); } - drop(wg); }); } }