Commit 502cb596 authored by Nick Mathewson's avatar Nick Mathewson 🥄
Browse files

Remove "tree" references from dns.


svn:r5488
parent ce3cdecb
...@@ -51,7 +51,7 @@ typedef struct pending_connection_t { ...@@ -51,7 +51,7 @@ typedef struct pending_connection_t {
} pending_connection_t; } pending_connection_t;
/** A DNS request: possibly completed, possibly pending; cached_resolve /** A DNS request: possibly completed, possibly pending; cached_resolve
* structs are stored at the OR side in a splay tree, and as a linked * structs are stored at the OR side in a hash table, and as a linked
* list from oldest to newest. * list from oldest to newest.
*/ */
typedef struct cached_resolve_t { typedef struct cached_resolve_t {
...@@ -76,8 +76,8 @@ static int spawn_dnsworker(void); ...@@ -76,8 +76,8 @@ static int spawn_dnsworker(void);
static int spawn_enough_dnsworkers(void); static int spawn_enough_dnsworkers(void);
static void send_resolved_cell(connection_t *conn, uint8_t answer_type); static void send_resolved_cell(connection_t *conn, uint8_t answer_type);
/** Splay tree of cached_resolve objects. */ /** Hash table of cached_resolve objects. */
static HT_HEAD(cache_tree, cached_resolve_t) cache_root; static HT_HEAD(cache_map, cached_resolve_t) cache_root;
/** Function to compare hashed resolves on their addresses; used to /** Function to compare hashed resolves on their addresses; used to
* implement splay trees. */ * implement splay trees. */
...@@ -94,14 +94,14 @@ cached_resolve_hash(cached_resolve_t *a) ...@@ -94,14 +94,14 @@ cached_resolve_hash(cached_resolve_t *a)
return ht_string_hash(a->address); return ht_string_hash(a->address);
} }
HT_PROTOTYPE(cache_tree, cached_resolve_t, node, cached_resolve_hash, HT_PROTOTYPE(cache_map, cached_resolve_t, node, cached_resolve_hash,
cached_resolves_eq); cached_resolves_eq);
HT_GENERATE(cache_tree, cached_resolve_t, node, cached_resolve_hash, HT_GENERATE(cache_map, cached_resolve_t, node, cached_resolve_hash,
cached_resolves_eq, 0.6, malloc, realloc, free); cached_resolves_eq, 0.6, malloc, realloc, free);
/** Initialize the DNS cache. */ /** Initialize the DNS cache. */
static void static void
init_cache_tree(void) init_cache_map(void)
{ {
HT_INIT(&cache_root); HT_INIT(&cache_root);
} }
...@@ -110,7 +110,7 @@ init_cache_tree(void) ...@@ -110,7 +110,7 @@ init_cache_tree(void)
void void
dns_init(void) dns_init(void)
{ {
init_cache_tree(); init_cache_map();
dnsworkers_rotate(); dnsworkers_rotate();
} }
...@@ -131,12 +131,12 @@ void ...@@ -131,12 +131,12 @@ void
dns_free_all(void) dns_free_all(void)
{ {
cached_resolve_t **ptr, **next, *item; cached_resolve_t **ptr, **next, *item;
for (ptr = HT_START(cache_tree, &cache_root); ptr != NULL; ptr = next) { for (ptr = HT_START(cache_map, &cache_root); ptr != NULL; ptr = next) {
item = *ptr; item = *ptr;
next = HT_NEXT_RMV(cache_tree, &cache_root, ptr); next = HT_NEXT_RMV(cache_map, &cache_root, ptr);
_free_cached_resolve(item); _free_cached_resolve(item);
} }
HT_CLEAR(cache_tree, &cache_root); HT_CLEAR(cache_map, &cache_root);
} }
/** Linked list of resolved addresses, oldest to newest. */ /** Linked list of resolved addresses, oldest to newest. */
...@@ -182,7 +182,7 @@ purge_expired_resolves(uint32_t now) ...@@ -182,7 +182,7 @@ purge_expired_resolves(uint32_t now)
oldest_cached_resolve = resolve->next; oldest_cached_resolve = resolve->next;
if (!oldest_cached_resolve) /* if there are no more, */ if (!oldest_cached_resolve) /* if there are no more, */
newest_cached_resolve = NULL; /* then make sure the list's tail knows that too */ newest_cached_resolve = NULL; /* then make sure the list's tail knows that too */
HT_REMOVE(cache_tree, &cache_root, resolve); HT_REMOVE(cache_map, &cache_root, resolve);
tor_free(resolve); tor_free(resolve);
} }
} }
...@@ -225,8 +225,8 @@ send_resolved_cell(connection_t *conn, uint8_t answer_type) ...@@ -225,8 +225,8 @@ send_resolved_cell(connection_t *conn, uint8_t answer_type)
conn->cpath_layer); conn->cpath_layer);
} }
/** Link <b>r</b> into the tree of address-to-result mappings, and add it to /** Link <b>r</b> into the hash table of address-to-result mappings, and add it
* the linked list of resolves-by-age. */ * to the linked list of resolves-by-age. */
static void static void
insert_resolve(cached_resolve_t *r) insert_resolve(cached_resolve_t *r)
{ {
...@@ -238,7 +238,7 @@ insert_resolve(cached_resolve_t *r) ...@@ -238,7 +238,7 @@ insert_resolve(cached_resolve_t *r)
} }
newest_cached_resolve = r; newest_cached_resolve = r;
HT_INSERT(cache_tree, &cache_root, r); HT_INSERT(cache_map, &cache_root, r);
} }
/** See if we have a cache entry for <b>exitconn</b>-\>address. if so, /** See if we have a cache entry for <b>exitconn</b>-\>address. if so,
...@@ -273,7 +273,7 @@ dns_resolve(connection_t *exitconn) ...@@ -273,7 +273,7 @@ dns_resolve(connection_t *exitconn)
} }
/* then take this opportunity to see if there are any expired /* then take this opportunity to see if there are any expired
* resolves in the tree. */ * resolves in the hash table. */
purge_expired_resolves(now); purge_expired_resolves(now);
/* lower-case exitconn->address, so it's in canonical form */ /* lower-case exitconn->address, so it's in canonical form */
...@@ -281,7 +281,7 @@ dns_resolve(connection_t *exitconn) ...@@ -281,7 +281,7 @@ dns_resolve(connection_t *exitconn)
/* now check the tree to see if 'address' is already there. */ /* now check the tree to see if 'address' is already there. */
strlcpy(search.address, exitconn->address, sizeof(search.address)); strlcpy(search.address, exitconn->address, sizeof(search.address));
resolve = HT_FIND(cache_tree, &cache_root, &search); resolve = HT_FIND(cache_map, &cache_root, &search);
if (resolve) { /* already there */ if (resolve) { /* already there */
switch (resolve->state) { switch (resolve->state) {
case CACHE_STATE_PENDING: case CACHE_STATE_PENDING:
...@@ -391,7 +391,7 @@ connection_dns_remove(connection_t *conn) ...@@ -391,7 +391,7 @@ connection_dns_remove(connection_t *conn)
strlcpy(search.address, conn->address, sizeof(search.address)); strlcpy(search.address, conn->address, sizeof(search.address));
resolve = HT_FIND(cache_tree, &cache_root, &search); resolve = HT_FIND(cache_map, &cache_root, &search);
if (!resolve) { if (!resolve) {
/* XXXX RD This *is* a bug, right? -NM */ /* XXXX RD This *is* a bug, right? -NM */
notice(LD_BUG,"Address '%s' is not pending. Dropping.", safe_str(conn->address)); notice(LD_BUG,"Address '%s' is not pending. Dropping.", safe_str(conn->address));
...@@ -432,7 +432,7 @@ assert_connection_edge_not_dns_pending(connection_t *conn) ...@@ -432,7 +432,7 @@ assert_connection_edge_not_dns_pending(connection_t *conn)
pending_connection_t *pend; pending_connection_t *pend;
cached_resolve_t **resolve; cached_resolve_t **resolve;
HT_FOREACH(resolve, cache_tree, &cache_root) { HT_FOREACH(resolve, cache_map, &cache_root) {
for (pend = (*resolve)->pending_connections; for (pend = (*resolve)->pending_connections;
pend; pend;
pend = pend->next) { pend = pend->next) {
...@@ -449,7 +449,7 @@ assert_all_pending_dns_resolves_ok(void) ...@@ -449,7 +449,7 @@ assert_all_pending_dns_resolves_ok(void)
pending_connection_t *pend; pending_connection_t *pend;
cached_resolve_t **resolve; cached_resolve_t **resolve;
HT_FOREACH(resolve, cache_tree, &cache_root) { HT_FOREACH(resolve, cache_map, &cache_root) {
for (pend = (*resolve)->pending_connections; for (pend = (*resolve)->pending_connections;
pend; pend;
pend = pend->next) { pend = pend->next) {
...@@ -475,7 +475,7 @@ dns_cancel_pending_resolve(char *address) ...@@ -475,7 +475,7 @@ dns_cancel_pending_resolve(char *address)
strlcpy(search.address, address, sizeof(search.address)); strlcpy(search.address, address, sizeof(search.address));
resolve = HT_FIND(cache_tree, &cache_root, &search); resolve = HT_FIND(cache_map, &cache_root, &search);
if (!resolve) { if (!resolve) {
/* XXXX RD This *is* a bug, right? -NM */ /* XXXX RD This *is* a bug, right? -NM */
notice(LD_BUG,"Address '%s' is not pending. Dropping.", safe_str(address)); notice(LD_BUG,"Address '%s' is not pending. Dropping.", safe_str(address));
...@@ -537,7 +537,7 @@ dns_purge_resolve(cached_resolve_t *resolve) ...@@ -537,7 +537,7 @@ dns_purge_resolve(cached_resolve_t *resolve)
} }
/* remove resolve from the tree */ /* remove resolve from the tree */
HT_REMOVE(cache_tree, &cache_root, resolve); HT_REMOVE(cache_map, &cache_root, resolve);
tor_free(resolve); tor_free(resolve);
} }
...@@ -560,7 +560,7 @@ dns_found_answer(char *address, uint32_t addr, char outcome) ...@@ -560,7 +560,7 @@ dns_found_answer(char *address, uint32_t addr, char outcome)
strlcpy(search.address, address, sizeof(search.address)); strlcpy(search.address, address, sizeof(search.address));
resolve = HT_FIND(cache_tree, &cache_root, &search); resolve = HT_FIND(cache_map, &cache_root, &search);
if (!resolve) { if (!resolve) {
info(LD_EXIT,"Resolved unasked address '%s'; caching anyway.", info(LD_EXIT,"Resolved unasked address '%s'; caching anyway.",
safe_str(address)); safe_str(address));
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment