dns-client: Fix issue that bootstrap dns not working caused by reducing CPU usage

This commit is contained in:
Nick Peng
2022-11-05 16:23:19 +08:00
parent 91ee65231e
commit ffd3cb2db5

View File

@@ -186,6 +186,7 @@ struct dns_client {
/* query list */
struct list_head dns_request_list;
pthread_cond_t run_cond;
atomic_t run_period;
atomic_t dns_server_num;
/* ECS */
@@ -1312,7 +1313,12 @@ static int _dns_client_server_pending(char *server_ip, int port, dns_server_type
pthread_mutex_lock(&pending_server_mutex);
list_add_tail(&pending->list, &pending_servers);
atomic_set(&client.run_period, 1);
pthread_mutex_unlock(&pending_server_mutex);
pthread_mutex_lock(&client.domain_map_lock);
pthread_cond_signal(&client.run_cond);
pthread_mutex_unlock(&client.domain_map_lock);
return 0;
errout:
if (pending) {
@@ -3266,6 +3272,12 @@ static void _dns_client_add_pending_servers(void)
dely = 0;
pthread_mutex_lock(&pending_server_mutex);
if (list_empty(&pending_servers)) {
atomic_set(&client.run_period, 0);
} else {
atomic_set(&client.run_period, 1);
}
list_for_each_entry_safe(pending, tmp, &pending_servers, list)
{
list_add(&pending->retry_list, &retry_list);
@@ -3436,7 +3448,7 @@ static void *_dns_client_work(void *arg)
}
pthread_mutex_lock(&client.domain_map_lock);
if (list_empty(&client.dns_request_list)) {
if (list_empty(&client.dns_request_list) && atomic_read(&client.run_period) == 0) {
pthread_cond_wait(&client.run_cond, &client.domain_map_lock);
expect_time = get_tick_count();
pthread_mutex_unlock(&client.domain_map_lock);
@@ -3519,6 +3531,7 @@ int dns_client_init(void)
memset(&client, 0, sizeof(client));
pthread_attr_init(&attr);
atomic_set(&client.dns_server_num, 0);
atomic_set(&client.run_period, 0);
epollfd = epoll_create1(EPOLL_CLOEXEC);
if (epollfd < 0) {