Fix deadlock when waiting for threads

master
trivernis 5 years ago
parent 7c43812937
commit 727483de7c

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

@ -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);
});
}
}

Loading…
Cancel
Save