diff options
Diffstat (limited to 'ares/ares_send.c')
-rw-r--r-- | ares/ares_send.c | 17 |
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); |