From 430114cd5ab344a6a39fd9e6d3857ade78e2f8e3 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Fri, 17 Apr 2009 16:11:11 +0100 Subject: net.server: Fix potential nil handler usage --- net/server.lua | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'net') diff --git a/net/server.lua b/net/server.lua index 0097be3c..77bc2f5c 100644 --- a/net/server.lua +++ b/net/server.lua @@ -325,7 +325,9 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport if not ( forced or fatalerror ) then handler.sendbuffer( ) if bufferqueuelen ~= 0 then -- try again... - handler.write = nil -- ... but no further writing allowed + if handler then + handler.write = nil -- ... but no further writing allowed + end toclose = true return false end @@ -337,9 +339,11 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport socket:close( ) _sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) _socketlist[ socket ] = nil - _writetimes[ handler ] = nil - _closelist[ handler ] = nil - handler = nil + if handler then + _writetimes[ handler ] = nil + _closelist[ handler ] = nil + handler = nil + end socket = nil mem_free( ) if server then -- cgit v1.2.3 From cface37b4928e922a43ef37d1bc49ab3a4009479 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Sat, 18 Apr 2009 17:48:30 +0100 Subject: net.adns: Call handler for records already cached --- net/adns.lua | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'net') diff --git a/net/adns.lua b/net/adns.lua index 4c0e5c38..07d4fe54 100644 --- a/net/adns.lua +++ b/net/adns.lua @@ -8,17 +8,21 @@ local coroutine, tostring, pcall = coroutine, tostring, pcall; module "adns" function lookup(handler, qname, qtype, qclass) - return dns.peek(qname, qtype, qclass) or - coroutine.wrap(function () - log("debug", "Records for "..qname.." not in cache, sending query (%s)...", tostring(coroutine.running())); + return coroutine.wrap(function (peek) + if peek then + log("debug", "Records for %s already cached, using those...", qname); + handler(peek); + return; + end + log("debug", "Records for %s not in cache, sending query (%s)...", qname, tostring(coroutine.running())); dns.query(qname, qtype, qclass); coroutine.yield(nil); -- Wait for reply - log("debug", "Reply for "..qname.." (%s)", tostring(coroutine.running())); + log("debug", "Reply for %s (%s)", qname, tostring(coroutine.running())); local ok, err = pcall(handler, dns.peek(qname, qtype, qclass)); if not ok then log("debug", "Error in DNS response handler: %s", tostring(err)); end - end)(); + end)(dns.peek(qname, qtype, qclass)); end function new_async_socket(sock) -- cgit v1.2.3