eval_send doesn't need to be an Option

We can drop the value manually, thus avoiding unwrap on each access.
This commit is contained in:
Ingvar Stepanyan 2019-08-05 21:10:14 +01:00
parent 48a136b3ba
commit 54318cfad1

View file

@ -41,7 +41,7 @@ pub(crate) struct Evaluator {
nth: AtomicUsize, nth: AtomicUsize,
best_candidate_size: Arc<AtomicMin>, best_candidate_size: Arc<AtomicMin>,
/// images are sent to the thread for evaluation /// images are sent to the thread for evaluation
eval_send: Option<SyncSender<Candidate>>, eval_send: SyncSender<Candidate>,
// the thread helps evaluate images asynchronously // the thread helps evaluate images asynchronously
eval_thread: thread::JoinHandle<Option<PngData>>, eval_thread: thread::JoinHandle<Option<PngData>>,
} }
@ -53,15 +53,15 @@ impl Evaluator {
deadline, deadline,
best_candidate_size: Arc::new(AtomicMin::new(None)), best_candidate_size: Arc::new(AtomicMin::new(None)),
nth: AtomicUsize::new(0), nth: AtomicUsize::new(0),
eval_send: Some(tx), eval_send: tx,
eval_thread: thread::spawn(move || Self::evaluate_images(rx)), eval_thread: thread::spawn(move || Self::evaluate_images(rx)),
} }
} }
/// Wait for all evaluations to finish and return smallest reduction /// Wait for all evaluations to finish and return smallest reduction
/// Or `None` if all reductions were worse than baseline. /// Or `None` if all reductions were worse than baseline.
pub fn get_result(mut self) -> Option<PngData> { pub fn get_result(self) -> Option<PngData> {
let _ = self.eval_send.take(); // disconnect the sender, breaking the loop in the thread drop(self.eval_send); // disconnect the sender, breaking the loop in the thread
self.eval_thread.join().expect("eval thread") self.eval_thread.join().expect("eval thread")
} }
@ -107,8 +107,6 @@ impl Evaluator {
best_candidate_size.set_min(idat_data.len()); best_candidate_size.set_min(idat_data.len());
// the rest is shipped to the evavluation/collection thread // the rest is shipped to the evavluation/collection thread
eval_send eval_send
.as_ref()
.expect("not finished yet")
.send(Candidate { .send(Candidate {
image: PngData { image: PngData {
idat_data, idat_data,