Mercurial > dovecot > original-hg > dovecot-1.2
changeset 7119:8c6a7af67e8c HEAD
Replaced clients hash with a linked list.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 06 Jan 2008 02:18:51 +0200 |
parents | b626d8975193 |
children | eb71cda96663 |
files | src/login-common/login-proxy.c src/login-common/ssl-proxy-openssl.c |
diffstat | 2 files changed, 25 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/src/login-common/login-proxy.c Sun Jan 06 02:18:20 2008 +0200 +++ b/src/login-common/login-proxy.c Sun Jan 06 02:18:51 2008 +0200 @@ -4,7 +4,7 @@ #include "ioloop.h" #include "istream.h" #include "ostream.h" -#include "hash.h" +#include "llist.h" #include "str-sanitize.h" #include "client-common.h" #include "login-proxy.h" @@ -13,6 +13,8 @@ #define OUTBUF_THRESHOLD 1024 struct login_proxy { + struct login_proxy *prev, *next; + int client_fd, server_fd; struct io *client_io, *server_io; struct istream *server_input; @@ -28,7 +30,8 @@ unsigned int destroying:1; }; -static struct hash_table *login_proxies; +static struct login_proxy *login_proxies = NULL; +static unsigned int login_proxy_count = 0; static void server_input(struct login_proxy *proxy) { @@ -186,7 +189,8 @@ if (proxy->client_fd != -1) { /* detached proxy */ main_unref(); - hash_remove(login_proxies, proxy); + DLLIST_REMOVE(&login_proxies, proxy); + login_proxy_count--; ipstr = net_ip2addr(&proxy->ip); i_info("proxy(%s): disconnecting %s", @@ -248,7 +252,7 @@ unsigned int login_proxy_get_count(void) { - return login_proxies == NULL ? 0 : hash_count(login_proxies); + return login_proxy_count; } void login_proxy_detach(struct login_proxy *proxy, struct istream *client_input, @@ -284,25 +288,13 @@ proxy->callback = NULL; proxy->context = NULL; - if (login_proxies == NULL) { - login_proxies = hash_create(system_pool, system_pool, - 0, NULL, NULL); - } - hash_insert(login_proxies, proxy, proxy); + login_proxy_count++; + DLLIST_PREPEND(&login_proxies, proxy); main_ref(); } void login_proxy_deinit(void) { - struct hash_iterate_context *iter; - void *key, *value; - - if (login_proxies == NULL) - return; - - iter = hash_iterate_init(login_proxies); - while (hash_iterate(iter, &key, &value)) - login_proxy_free(value); - hash_iterate_deinit(&iter); - hash_destroy(&login_proxies); + while (login_proxies != NULL) + login_proxy_free(login_proxies); }
--- a/src/login-common/ssl-proxy-openssl.c Sun Jan 06 02:18:20 2008 +0200 +++ b/src/login-common/ssl-proxy-openssl.c Sun Jan 06 02:18:51 2008 +0200 @@ -6,7 +6,7 @@ #include "network.h" #include "ostream.h" #include "read-full.h" -#include "hash.h" +#include "llist.h" #include "ssl-proxy.h" #include <fcntl.h> @@ -35,6 +35,7 @@ struct ssl_proxy { int refcount; + struct ssl_proxy *prev, *next; SSL *ssl; struct ip_addr ip; @@ -64,7 +65,8 @@ static int extdata_index; static SSL_CTX *ssl_ctx; -static struct hash_table *ssl_proxies; +static unsigned int ssl_proxy_count; +static struct ssl_proxy *ssl_proxies; static struct ssl_parameters ssl_params; static int ssl_username_nid; @@ -495,7 +497,8 @@ proxy->ip = *ip; SSL_set_ex_data(ssl, extdata_index, proxy); - hash_insert(ssl_proxies, proxy, proxy); + ssl_proxy_count++; + DLLIST_PREPEND(&ssl_proxies, proxy); ssl_step(proxy); main_ref(); @@ -560,7 +563,8 @@ return; proxy->destroyed = TRUE; - hash_remove(ssl_proxies, proxy); + ssl_proxy_count--; + DLLIST_REMOVE(&ssl_proxies, proxy); if (proxy->io_ssl_read != NULL) io_remove(&proxy->io_ssl_read); @@ -661,7 +665,7 @@ unsigned int ssl_proxy_get_count(void) { - return ssl_proxies == NULL ? 0 : hash_count(ssl_proxies); + return ssl_proxy_count; } static void *ssl_clean_malloc(size_t size) @@ -778,23 +782,18 @@ initialized though. */ (void)RAND_bytes(&buf, 1); - ssl_proxies = hash_create(system_pool, system_pool, 0, NULL, NULL); + ssl_proxy_count = 0; + ssl_proxies = NULL; ssl_initialized = TRUE; } void ssl_proxy_deinit(void) { - struct hash_iterate_context *iter; - void *key, *value; - if (!ssl_initialized) return; - iter = hash_iterate_init(ssl_proxies); - while (hash_iterate(iter, &key, &value)) - ssl_proxy_destroy(value); - hash_iterate_deinit(&iter); - hash_destroy(&ssl_proxies); + while (ssl_proxies != NULL) + ssl_proxy_destroy(ssl_proxies); ssl_free_parameters(&ssl_params); SSL_CTX_free(ssl_ctx);