Software /
code /
prosody
Changeset
11016:5176d9f727f6 0.11
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.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 08 Aug 2020 13:13:50 +0100 |
parents | 11015:355eae2f9ba8 |
children | 11017:1f41f38a92f7 11018:bacca65ce107 |
files | net/http.lua |
diffstat | 1 files changed, 11 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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;