diff options
author | Aram Drevekenin <aram@poor.dev> | 2019-10-14 14:20:05 +0200 |
---|---|---|
committer | Aram Drevekenin <aram@poor.dev> | 2019-10-14 14:20:05 +0200 |
commit | d420d79f8bebb53674a36f78f205d5089ad6834e (patch) | |
tree | 03e8fa0c830fcadd692d5a46ae719af4c248ffe3 | |
parent | 7a6390756835bffc7fddadb6933f3cfc33d80bc3 (diff) |
fix(dns): handle premature returning of cvar
-rw-r--r-- | src/network/dns_queue.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/network/dns_queue.rs b/src/network/dns_queue.rs index dea30ca..d007031 100644 --- a/src/network/dns_queue.rs +++ b/src/network/dns_queue.rs @@ -34,13 +34,19 @@ impl DnsQueue { } pub fn wait_for_job(&self) -> Option<Ipv4Addr> { let mut jobs = self.jobs.lock().unwrap(); - if jobs.is_empty() { - jobs = self.cvar.wait(jobs).unwrap(); + loop { + match jobs.pop() { + Some(job) => return job, + None => { + jobs = self.cvar.wait(jobs).unwrap(); + } + } } - jobs.pop()? } pub fn end(&self) { - self.jobs.lock().unwrap().push(None); + let mut jobs = self.jobs.lock().unwrap(); + jobs.clear(); + jobs.push(None); self.cvar.notify_all(); } } |