dovecot-2.2: lib-http: Track peers using a linked list also.

dovecot at dovecot.org dovecot at dovecot.org
Tue Feb 26 17:16:55 EET 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/287e48607c96
changeset: 15976:287e48607c96
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Feb 26 15:55:16 2013 +0200
description:
lib-http: Track peers using a linked list also.
Mainly because this makes it much easier to debug using gdb. The overhead
isn't that much extra either.

diffstat:

 src/lib-http/http-client-peer.c    |  3 +++
 src/lib-http/http-client-private.h |  2 ++
 src/lib-http/http-client.c         |  7 ++-----
 3 files changed, 7 insertions(+), 5 deletions(-)

diffs (69 lines):

diff -r 2f8ccc958a6d -r 287e48607c96 src/lib-http/http-client-peer.c
--- a/src/lib-http/http-client-peer.c	Tue Feb 26 15:53:30 2013 +0200
+++ b/src/lib-http/http-client-peer.c	Tue Feb 26 15:55:16 2013 +0200
@@ -5,6 +5,7 @@
 #include "str.h"
 #include "hash.h"
 #include "array.h"
+#include "llist.h"
 #include "istream.h"
 #include "ostream.h"
 #include "iostream-ssl.h"
@@ -204,6 +205,7 @@
 
 	hash_table_insert
 		(client->peers, (const struct http_client_peer_addr *)&peer->addr, peer);
+	DLLIST_PREPEND(&client->peers_list, peer);
 
 	http_client_peer_debug(peer, "Peer created");
 
@@ -271,6 +273,7 @@
 
 	hash_table_remove
 		(peer->client->peers, (const struct http_client_peer_addr *)&peer->addr);
+	DLLIST_REMOVE(&peer->client->peers_list, peer);
 
 	i_free(peer);
 	*_peer = NULL;
diff -r 2f8ccc958a6d -r 287e48607c96 src/lib-http/http-client-private.h
--- a/src/lib-http/http-client-private.h	Tue Feb 26 15:53:30 2013 +0200
+++ b/src/lib-http/http-client-private.h	Tue Feb 26 15:55:16 2013 +0200
@@ -119,6 +119,7 @@
 struct http_client_peer {
 	struct http_client_peer_addr addr;
 	struct http_client *client;
+	struct http_client_peer *prev, *next;
 
 	/* hosts served through this peer */
 	ARRAY_TYPE(http_client_host) hosts;
@@ -179,6 +180,7 @@
 	HASH_TABLE_TYPE(http_client_host) hosts;
 	struct http_client_host *hosts_list;
 	HASH_TABLE_TYPE(http_client_peer) peers;
+	struct http_client_peer *peers_list;
 	unsigned int pending_requests;
 };
 
diff -r 2f8ccc958a6d -r 287e48607c96 src/lib-http/http-client.c
--- a/src/lib-http/http-client.c	Tue Feb 26 15:53:30 2013 +0200
+++ b/src/lib-http/http-client.c	Tue Feb 26 15:55:16 2013 +0200
@@ -103,17 +103,14 @@
 void http_client_deinit(struct http_client **_client)
 {
 	struct http_client *client = *_client;
-	struct hash_iterate_context *iter;
 	struct http_client_host *host;
-	const struct http_client_peer_addr *addr;
 	struct http_client_peer *peer;
 
 	/* free peers */
-	iter = hash_table_iterate_init(client->peers);
-	while (hash_table_iterate(iter, client->peers, &addr, &peer)) {
+	while (client->peers_list != NULL) {
+		peer = client->peers_list;
 		http_client_peer_free(&peer);
 	}
-	hash_table_iterate_deinit(&iter);
 	hash_table_destroy(&client->peers);
 
 	/* free hosts */


More information about the dovecot-cvs mailing list