# HG changeset patch # User Matthew Wild # Date 1596888830 -3600 # Node ID 5176d9f727f6366af3df75ca65d7fdaddf72ed35 # Parent 355eae2f9ba866d5c1ba59823a9ca9ea93a88ada 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. diff -r 355eae2f9ba8 -r 5176d9f727f6 net/http.lua --- a/net/http.lua Sat Aug 08 13:11:11 2020 +0100 +++ b/net/http.lua Sat Aug 08 13:13:50 2020 +0100 @@ -56,6 +56,16 @@ 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 @@ end req.reader = request_reader; req.state = "status"; + req.cancel = cancel_request; requests[req.conn] = req;