Fix deadlock when waiting for threads

master
trivernis 5 years ago
parent 7c43812937
commit 727483de7c

@ -1,6 +1,6 @@
[package] [package]
name = "bdflib" name = "bdflib"
version = "0.3.0" version = "0.3.1"
authors = ["trivernis <trivernis@gmail.com>"] authors = ["trivernis <trivernis@gmail.com>"]
edition = "2018" edition = "2018"
license-file = "LICENSE" license-file = "LICENSE"

@ -93,19 +93,21 @@ impl BDFWriter {
/// Starts threads for parallel chunk compression /// Starts threads for parallel chunk compression
pub fn start_threads(&self) { pub fn start_threads(&self) {
for _ in 0..num_cpus::get() { for _ in 0..num_cpus::get() {
let compress = self.compressed;
let compression_level = self.compression_level;
thread::spawn({
let r = self.thread_manager.receiver_work.clone(); let r = self.thread_manager.receiver_work.clone();
let s = self.thread_manager.sender_result.clone(); let s = self.thread_manager.sender_result.clone();
let wg: WaitGroup = self.thread_manager.wg.clone(); let wg: WaitGroup = self.thread_manager.wg.clone();
let compress = self.compressed; move || {
let compression_level = self.compression_level; for mut chunk in r {
thread::spawn(move || {
for mut chunk in r.iter() {
if compress { if compress {
chunk.compress(compression_level).expect("failed to compress chunk"); 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);
}
}); });
} }
} }

Loading…
Cancel
Save