# HG changeset patch # User Waqas Hussain # Date 1298408635 -18000 # Node ID c1e4d8326ab073c84978ea7be0bc4366e744050e # Parent dfeae208e5b4f9b1afe53ec0d673fdc2b581ab0d net.httpserver: Catch errors thrown in HTTP handlers. diff -r dfeae208e5b4 -r c1e4d8326ab0 net/httpserver.lua --- a/net/httpserver.lua Wed Feb 23 01:34:46 2011 +0500 +++ b/net/httpserver.lua Wed Feb 23 02:03:55 2011 +0500 @@ -17,6 +17,8 @@ local t_insert, t_concat = table.insert, table.concat; local tonumber, tostring, pairs, ipairs, type = tonumber, tostring, pairs, ipairs, type; +local xpcall = xpcall; +local debug_traceback = debug.traceback; local urlencode = function (s) return s and (s:gsub("%W", function (c) return ("%%%02x"):format(c:byte()); end)); end @@ -86,6 +88,12 @@ callback = (request.server and request.server.handlers[base]) or default_handler; end if callback then + local _callback = callback; + function callback(a, b, c) + local status, result = xpcall(function() _callback(a, b, c) end, debug_traceback); + if status then return result; end + log("error", "Error in HTTP server handler: %s", result); + end if err then log("debug", "Request error: "..err); if not callback(nil, err, request) then