commit d2543217f5e0f38040444b164650808f2c366d54
Author: Petr Špaček <petr.spacek@nic.cz>
Date: Fri Apr 12 16:44:52 2019 +0200
http/server: close connection on unhandled internal errors
Fixes: #146
I'm not sure if implementation is correct, or if it best way to handle
it. In any case it fixes client-visible problem where lua-http server
keep connection open even after internal error (like #145).
diff --git a/http/server.lua b/http/server.lua
index 7f5bfd0..1dcf2be 100644
--- a/http/server.lua
+++ b/http/server.lua
@@ -152,7 +152,16 @@ local function handle_socket(self, socket)
while true do
local timeout = deadline and deadline-monotime() or self.intra_stream_timeout
local stream
- stream, err, errno = conn:get_next_incoming_stream(timeout)
+ local stream_or_err
+ local finished
+ finished, stream_or_err, err, errno = xpcall(conn.get_next_incoming_stream, debug.traceback, conn, timeout)
+ if not finished then -- uncaught internal error, terminate connection
+ err = stream_or_err
+ errno = ce.EFAULT
+ stream = nil
+ else
+ stream = stream_or_err
+ end
if stream == nil then
if (err ~= nil -- client closed connection
and errno ~= ce.ECONNRESET