aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2014-06-30 13:11:01 +0200
committerKim Alvefur <zash@zash.se>2014-06-30 13:11:01 +0200
commit7dd5829ef95b16d62e45a7cfec5986b023342670 (patch)
tree797403783259bad9e629c25caf71f8f832d36f76 /net
parent0226460cacd55adf96cb46f57f6a010181f445c5 (diff)
parentd2e295445184a7fed98f158968e509b1258d3868 (diff)
downloadprosody-7dd5829ef95b16d62e45a7cfec5986b023342670.tar.gz
prosody-7dd5829ef95b16d62e45a7cfec5986b023342670.zip
Merge 0.9->0.10
Diffstat (limited to 'net')
-rw-r--r--net/adns.lua1
-rw-r--r--net/dns.lua9
2 files changed, 9 insertions, 1 deletions
diff --git a/net/adns.lua b/net/adns.lua
index 08421f77..15814fe7 100644
--- a/net/adns.lua
+++ b/net/adns.lua
@@ -52,6 +52,7 @@ function new_async_socket(sock, resolver)
local peername = "<unknown>";
local listener = {};
local handler = {};
+ local err;
function listener.onincoming(conn, data)
if data then
dns.feed(handler, data);
diff --git a/net/dns.lua b/net/dns.lua
index bd5c260e..088067ae 100644
--- a/net/dns.lua
+++ b/net/dns.lua
@@ -722,6 +722,14 @@ end
function resolver:query(qname, qtype, qclass) -- - - - - - - - - - -- query
qname, qtype, qclass = standardize(qname, qtype, qclass)
+ local co = coroutine.running();
+ local q = get(self.wanted, qclass, qtype, qname);
+ if co and q then
+ -- We are already waiting for a reply to an identical query.
+ set(self.wanted, qclass, qtype, qname, co, true);
+ return true;
+ end
+
if not self.server then self:adddefaultnameservers(); end
local question = encodeQuestion(qname, qtype, qclass);
@@ -742,7 +750,6 @@ function resolver:query(qname, qtype, qclass) -- - - - - - - - - - -- query
self.active[id][question] = o;
-- remember which coroutine wants the answer
- local co = coroutine.running();
if co then
set(self.wanted, qclass, qtype, qname, co, true);
--set(self.yielded, co, qclass, qtype, qname, true);