From 4307246c8b26a081aaeb4c68b585d77517da4ff7 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Fri, 29 Dec 2017 00:48:32 +0100 Subject: [PATCH] lib-http: client: Register client objects in the associated client shared context. --- src/lib-http/http-client-private.h | 3 +++ src/lib-http/http-client.c | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/lib-http/http-client-private.h b/src/lib-http/http-client-private.h index 425ce3c1ed..09d99a8b90 100644 --- a/src/lib-http/http-client-private.h +++ b/src/lib-http/http-client-private.h @@ -364,6 +364,8 @@ struct http_client { struct http_client_context *cctx; struct http_client_settings set; + struct http_client *prev, *next; + struct event *event; struct ioloop *ioloop; struct ssl_iostream_context *ssl_ctx; @@ -388,6 +390,7 @@ struct http_client_context { struct http_client_settings set; + struct http_client *clients_list; struct connection_list *conn_list; HASH_TABLE_TYPE(http_client_peer_shared) peers; diff --git a/src/lib-http/http-client.c b/src/lib-http/http-client.c index 5a99c91f52..8b3ed5083d 100644 --- a/src/lib-http/http-client.c +++ b/src/lib-http/http-client.c @@ -4,6 +4,7 @@ #include "net.h" #include "str.h" #include "hash.h" +#include "llist.h" #include "array.h" #include "ioloop.h" #include "istream.h" @@ -89,6 +90,13 @@ static struct http_client_context *http_client_global_context = NULL; +static void +http_client_context_add_client(struct http_client_context *cctx, + struct http_client *client); +static void +http_client_context_remove_client(struct http_client_context *cctx, + struct http_client *client); + /* * Client */ @@ -209,6 +217,8 @@ http_client_init_shared(struct http_client_context *cctx, i_array_init(&client->delayed_failing_requests, 1); + http_client_context_add_client(cctx, client); + return client; } @@ -259,6 +269,7 @@ void http_client_deinit(struct http_client **_client) if (client->ssl_ctx != NULL) ssl_iostream_context_unref(&client->ssl_ctx); + http_client_context_remove_client(client->cctx, client); http_client_context_unref(&client->cctx); event_unref(&client->event); pool_unref(&client->pool); @@ -526,6 +537,20 @@ void http_client_context_unref(struct http_client_context **_cctx) pool_unref(&cctx->pool); } +static void +http_client_context_add_client(struct http_client_context *cctx, + struct http_client *client) +{ + DLLIST_PREPEND(&cctx->clients_list, client); +} + +static void +http_client_context_remove_client(struct http_client_context *cctx, + struct http_client *client) +{ + DLLIST_REMOVE(&cctx->clients_list, client); +} + void http_client_context_switch_ioloop(struct http_client_context *cctx) { struct connection *_conn = cctx->conn_list->connections; -- 2.47.3