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