diff options
Diffstat (limited to 'src/network/dns_queue.rs')
-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(); } } |