aboutsummaryrefslogtreecommitdiff
path: root/ares/ares_send.c
diff options
context:
space:
mode:
Diffstat (limited to 'ares/ares_send.c')
-rw-r--r--ares/ares_send.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/ares/ares_send.c b/ares/ares_send.c
index c8015803b..2007321f9 100644
--- a/ares/ares_send.c
+++ b/ares/ares_send.c
@@ -102,9 +102,20 @@ void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
query->error_status = ARES_ECONNREFUSED;
query->timeouts = 0;
- /* Chain the query into this channel's query list. */
- query->next = channel->queries;
- channel->queries = query;
+ /* Initialize our list nodes. */
+ ares__init_list_node(&(query->queries_by_qid), query);
+ ares__init_list_node(&(query->queries_by_timeout), query);
+ ares__init_list_node(&(query->queries_to_server), query);
+ ares__init_list_node(&(query->all_queries), query);
+
+ /* Chain the query into the list of all queries. */
+ ares__insert_in_list(&(query->all_queries), &(channel->all_queries));
+ /* Keep track of queries bucketed by qid, so we can process DNS
+ * responses quickly.
+ */
+ ares__insert_in_list(
+ &(query->queries_by_qid),
+ &(channel->queries_by_qid[query->qid % ARES_QID_TABLE_SIZE]));
/* Perform the first query action. */
time(&now);