diff --git a/regress/178-last-resolver.lua b/regress/178-last-resolver.lua new file mode 100755 index 0000000..601542b --- /dev/null +++ b/regress/178-last-resolver.lua @@ -0,0 +1,14 @@ +#!/bin/sh +_=[[ + . "${0%%/*}/regress.sh" + exec runlua "$0" "$@" +]] +require"regress".export".*" + +local pool = dns.getpool() +local r = pool:get() +pool:put(r) +local q = pool:get() +check(r == q, "resolver not reused") + +say"OK" diff --git a/src/dns.resolvers.lua b/src/dns.resolvers.lua index 4c671ed..ecdff5b 100644 --- a/src/dns.resolvers.lua +++ b/src/dns.resolvers.lua @@ -115,17 +115,10 @@ local loader = function(loader, ...) local res while true do local cache_len = #self.cache - if cache_len > 1 then + if cache_len > 0 then res = self.cache[cache_len] self.cache[cache_len] = nil - if res then - break - else - if deadline and deadline <= monotime() then - return nil, ETIMEDOUT - end - self.condvar:wait(totimeout(deadline)) - end + break elseif self.alive.n < self.hiwat then local why res, why = resolver.new(self.resconf, self.hosts, self.hints) @@ -134,6 +127,9 @@ local loader = function(loader, ...) end break end + if not self.condvar:wait(totimeout(deadline)) then + return nil, ETIMEDOUT + end end self.alive:add(res) return res