From facf6720815f28fb7ed7c98a79b181e40887a5b3 Mon Sep 17 00:00:00 2001 From: Nick Peng Date: Mon, 7 Nov 2022 19:57:17 +0800 Subject: [PATCH] dns_client: fix crash issue when upstream response delay is lower than 1ms --- src/dns_client.c | 10 ++++++---- src/dns_server.c | 3 ++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/dns_client.c b/src/dns_client.c index 4a67211..c54ab83 100644 --- a/src/dns_client.c +++ b/src/dns_client.c @@ -3135,11 +3135,13 @@ int dns_client_query(const char *domain, int qtype, dns_client_callback callback } pthread_mutex_lock(&client.domain_map_lock); - if (list_empty(&client.dns_request_list)) { - pthread_cond_signal(&client.run_cond); - } + if (hash_hashed(&query->domain_node)) { + if (list_empty(&client.dns_request_list)) { + pthread_cond_signal(&client.run_cond); + } - list_add_tail(&query->dns_request_list, &client.dns_request_list); + list_add_tail(&query->dns_request_list, &client.dns_request_list); + } pthread_mutex_unlock(&client.domain_map_lock); tlog(TLOG_INFO, "send request %s, qtype %d, id %d\n", domain, qtype, query->sid); diff --git a/src/dns_server.c b/src/dns_server.c index e2e340e..c2afae5 100644 --- a/src/dns_server.c +++ b/src/dns_server.c @@ -908,7 +908,7 @@ static int _dns_server_reply_udp(struct dns_request *request, struct dns_server_ struct iovec iovec[1]; struct msghdr msg; struct cmsghdr *cmsg; - char msg_control[256]; + char msg_control[64]; if (atomic_read(&server.run) == 0 || inpacket == NULL || inpacket_len <= 0) { return -1; @@ -916,6 +916,7 @@ static int _dns_server_reply_udp(struct dns_request *request, struct dns_server_ iovec[0].iov_base = inpacket; iovec[0].iov_len = inpacket_len; + memset(msg_control, 0, sizeof(msg_control)); msg.msg_iov = iovec; msg.msg_iovlen = 1; msg.msg_control = msg_control;