From 11e49af5e884828746f37e37afd4f89d5236c6cb Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Sat, 8 Aug 2020 13:11:11 +0100 Subject: net.http: Re-expose destroy_request() function This was accidentally turned private in 647adfd8f738 as part of refactoring for Lua 5.2+. --- net/http.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/net/http.lua b/net/http.lua index 0adac26c..14107bf4 100644 --- a/net/http.lua +++ b/net/http.lua @@ -302,4 +302,5 @@ return { urldecode = util_http.urldecode; formencode = util_http.formencode; formdecode = util_http.formdecode; + destroy_request = destroy_request; }; -- cgit v1.2.3 From dc206f0ff429cb3da3569c633a76c74d5b4f8d1b Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Sat, 8 Aug 2020 13:13:50 +0100 Subject: net.http: Add request:cancel() method This is a new API that should be used in preference to http.destroy_request() when possible, as it ensures the callback is always called (with an error of course). APIs that have edge-cases where they don't call callbacks have, from experience, shown to be difficult to work with and often lead to unintentional leaks when the callback was expected to free up certain resources. --- net/http.lua | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/net/http.lua b/net/http.lua index 14107bf4..ae9d2974 100644 --- a/net/http.lua +++ b/net/http.lua @@ -56,6 +56,16 @@ local function destroy_request(request) end end +local function cancel_request(request, reason) + if request.callback then + request.callback(reason or "cancelled", 0, request); + request.callback = nil; + end + if request.conn then + destroy_request(request); + end +end + local function request_reader(request, data, err) if not request.parser then local function error_cb(reason) @@ -105,6 +115,7 @@ function listener.onconnect(conn) end req.reader = request_reader; req.state = "status"; + req.cancel = cancel_request; requests[req.conn] = req; -- cgit v1.2.3