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;