X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fadns.c;h=cae8234f499d506d8dedb2ed02a47c9f3ba1cd59;hb=4b6c01b1d5383b1a7417244a31ad4652aab2d5db;hp=cb9611e1594b246ab71f8364ef624d33d2ddf3b4;hpb=8e4f6238558c28cd05bd580cc947d7178d2bac90;p=meshlink diff --git a/src/adns.c b/src/adns.c index cb9611e1..cae8234f 100644 --- a/src/adns.c +++ b/src/adns.c @@ -85,8 +85,9 @@ static void adns_cb_handler(event_loop_t *loop, void *data) { } void init_adns(meshlink_handle_t *mesh) { - signal_add(&mesh->loop, &mesh->adns_signal, adns_cb_handler, mesh, 1); meshlink_queue_init(&mesh->adns_queue); + meshlink_queue_init(&mesh->adns_done_queue); + signal_add(&mesh->loop, &mesh->adns_signal, adns_cb_handler, mesh, 1); pthread_create(&mesh->adns_thread, NULL, adns_loop, mesh); } @@ -157,7 +158,9 @@ static void *adns_blocking_handler(void *data) { info->ai = NULL; } - pthread_mutex_lock(&info->mutex); + if(pthread_mutex_lock(&info->mutex) != 0) { + abort(); + } bool cleanup = info->done; @@ -202,7 +205,10 @@ struct addrinfo *adns_blocking_request(meshlink_handle_t *mesh, char *host, char pthread_detach(thread); } - pthread_mutex_lock(&info->mutex); + if(pthread_mutex_lock(&info->mutex) != 0) { + abort(); + } + pthread_cond_timedwait(&info->cond, &info->mutex, &deadline); struct addrinfo *result = NULL;