{
struct http_client_host *host = *_host;
struct http_client_host_port *hport;
+ struct http_client_request *req, *const *reqp;
const char *hostname = host->name;
http_client_host_debug(host, "Host destroy");
}
array_free(&host->ports);
- i_assert(array_count(&host->delayed_failing_requests) == 0);
+ while (array_count(&host->delayed_failing_requests) > 0) {
+ reqp = array_idx(&host->delayed_failing_requests, 0);
+ req = *reqp;
+
+ i_assert(req->refcount == 1);
+ http_client_request_unref(&req);
+ }
array_free(&host->delayed_failing_requests);
i_free(host->ips);
/*
* Request
*/
+static void http_client_request_remove_delayed(struct http_client_request *req);
#undef http_client_request
struct http_client_request *
req->refcount++;
}
-static void http_client_request_remove_delayed(struct http_client_request *req)
-{
- struct http_client_request *const *reqs;
- unsigned int i, count;
-
- timeout_remove(&req->to_delayed_error);
-
- reqs = array_get(&req->host->delayed_failing_requests, &count);
- for (i = 0; i < count; i++) {
- if (reqs[i] == req) {
- array_delete(&req->host->delayed_failing_requests, i, 1);
- return;
- }
- }
- i_unreached();
-}
-
void http_client_request_unref(struct http_client_request **_req)
{
struct http_client_request *req = *_req;
}
}
-static void http_client_request_error_delayed(struct http_client_request *req)
+static void http_client_request_remove_delayed(struct http_client_request *req)
{
- http_client_request_remove_delayed(req);
+ struct http_client_request *const *reqs;
+ unsigned int i, count;
+
http_client_request_send_error(req, req->delayed_error_status,
req->delayed_error);
+
+ timeout_remove(&req->to_delayed_error);
+
+ reqs = array_get(&req->host->delayed_failing_requests, &count);
+ for (i = 0; i < count; i++) {
+ if (reqs[i] == req) {
+ array_delete(&req->host->delayed_failing_requests, i, 1);
+ return;
+ }
+ }
+ i_unreached();
+}
+
+static void http_client_request_error_delayed(struct http_client_request *req)
+{
+ http_client_request_remove_delayed(req);
http_client_request_unref(&req);
}