net.http.server: Fix #1789
Unregistering the response before sending the trailer of the chunked
transfer encoding prevents opportunistic writes from being invoked and
running this code again when, which may cause an error when closing the
file handle a second time.
Normally the file size is known, so no chuck headers are sent.
--- a/net/http/server.lua Sun Jan 01 16:20:58 2023 +0100
+++ b/net/http/server.lua Sun Jan 08 13:35:04 2023 +0100
@@ -377,12 +377,12 @@
-- io.write("."); io.flush();
response.conn:write(chunk);
else
+ incomplete[response.conn] = nil;
if chunked then
response.conn:write("0\r\n\r\n");
end
-- io.write("\n");
if f.close then f:close(); end
- incomplete[response.conn] = nil;
return response:done();
end
end