Blob Blame History Raw
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