2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-24 19:18:50 +00:00

Use UV_RUNTIME_CHECK() as appropriate

Replace the RUNTIME_CHECK() calls for libuv API calls with
UV_RUNTIME_CHECK() to get more detailed error message when
something fails and should not.
This commit is contained in:
Ondřej Surý 2022-02-15 14:51:02 +01:00
parent 62e15bb06d
commit 8715be1e4b
5 changed files with 68 additions and 58 deletions

View File

@ -295,20 +295,21 @@ isc__netmgr_create(isc_mem_t *mctx, uint32_t workers, isc_nm_t **netmgrp) {
mgr->workers = isc_mem_get(mctx, workers * sizeof(isc__networker_t)); mgr->workers = isc_mem_get(mctx, workers * sizeof(isc__networker_t));
for (size_t i = 0; i < workers; i++) { for (size_t i = 0; i < workers; i++) {
int r;
isc__networker_t *worker = &mgr->workers[i]; isc__networker_t *worker = &mgr->workers[i];
int r;
*worker = (isc__networker_t){ *worker = (isc__networker_t){
.mgr = mgr, .mgr = mgr,
.id = i, .id = i,
}; };
r = uv_loop_init(&worker->loop); r = uv_loop_init(&worker->loop);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_loop_init, r);
worker->loop.data = &mgr->workers[i]; worker->loop.data = &mgr->workers[i];
r = uv_async_init(&worker->loop, &worker->async, async_cb); r = uv_async_init(&worker->loop, &worker->async, async_cb);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_async_init, r);
isc_mutex_init(&worker->lock); isc_mutex_init(&worker->lock);
isc_condition_init(&worker->cond_prio); isc_condition_init(&worker->cond_prio);
@ -384,7 +385,7 @@ nm_destroy(isc_nm_t **mgr0) {
isc_mutex_destroy(&worker->lock); isc_mutex_destroy(&worker->lock);
r = uv_loop_close(&worker->loop); r = uv_loop_close(&worker->loop);
INSIST(r == 0); UV_RUNTIME_CHECK(uv_loop_close, r);
for (size_t type = 0; type < NETIEVENT_MAX; type++) { for (size_t type = 0; type < NETIEVENT_MAX; type++) {
isc_queue_destroy(worker->ievents[type]); isc_queue_destroy(worker->ievents[type]);
@ -2098,11 +2099,11 @@ isc__nmsocket_readtimeout_cb(uv_timer_t *timer) {
void void
isc__nmsocket_timer_restart(isc_nmsocket_t *sock) { isc__nmsocket_timer_restart(isc_nmsocket_t *sock) {
int r = 0;
REQUIRE(VALID_NMSOCK(sock)); REQUIRE(VALID_NMSOCK(sock));
if (atomic_load(&sock->connecting)) { if (atomic_load(&sock->connecting)) {
int r;
if (sock->connect_timeout == 0) { if (sock->connect_timeout == 0) {
return; return;
} }
@ -2110,17 +2111,19 @@ isc__nmsocket_timer_restart(isc_nmsocket_t *sock) {
r = uv_timer_start(&sock->timer, r = uv_timer_start(&sock->timer,
isc__nmsocket_connecttimeout_cb, isc__nmsocket_connecttimeout_cb,
sock->connect_timeout + 10, 0); sock->connect_timeout + 10, 0);
UV_RUNTIME_CHECK(uv_timer_start, r);
} else { } else {
int r;
if (sock->read_timeout == 0) { if (sock->read_timeout == 0) {
return; return;
} }
r = uv_timer_start(&sock->timer, isc__nmsocket_readtimeout_cb, r = uv_timer_start(&sock->timer, isc__nmsocket_readtimeout_cb,
sock->read_timeout, 0); sock->read_timeout, 0);
UV_RUNTIME_CHECK(uv_timer_start, r);
} }
RUNTIME_CHECK(r == 0);
} }
bool bool
@ -2143,12 +2146,14 @@ isc__nmsocket_timer_start(isc_nmsocket_t *sock) {
void void
isc__nmsocket_timer_stop(isc_nmsocket_t *sock) { isc__nmsocket_timer_stop(isc_nmsocket_t *sock) {
int r;
REQUIRE(VALID_NMSOCK(sock)); REQUIRE(VALID_NMSOCK(sock));
/* uv_timer_stop() is idempotent, no need to check if running */ /* uv_timer_stop() is idempotent, no need to check if running */
int r = uv_timer_stop(&sock->timer); r = uv_timer_stop(&sock->timer);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_timer_stop, r);
} }
isc__nm_uvreq_t * isc__nm_uvreq_t *
@ -2232,24 +2237,27 @@ isc__nm_start_reading(isc_nmsocket_t *sock) {
case isc_nm_udpsocket: case isc_nm_udpsocket:
r = uv_udp_recv_start(&sock->uv_handle.udp, isc__nm_alloc_cb, r = uv_udp_recv_start(&sock->uv_handle.udp, isc__nm_alloc_cb,
isc__nm_udp_read_cb); isc__nm_udp_read_cb);
UV_RUNTIME_CHECK(uv_udp_recv_start, r);
break; break;
case isc_nm_tcpsocket: case isc_nm_tcpsocket:
r = uv_read_start(&sock->uv_handle.stream, isc__nm_alloc_cb, r = uv_read_start(&sock->uv_handle.stream, isc__nm_alloc_cb,
isc__nm_tcp_read_cb); isc__nm_tcp_read_cb);
UV_RUNTIME_CHECK(uv_read_start, r);
break; break;
case isc_nm_tcpdnssocket: case isc_nm_tcpdnssocket:
r = uv_read_start(&sock->uv_handle.stream, isc__nm_alloc_cb, r = uv_read_start(&sock->uv_handle.stream, isc__nm_alloc_cb,
isc__nm_tcpdns_read_cb); isc__nm_tcpdns_read_cb);
UV_RUNTIME_CHECK(uv_read_start, r);
break; break;
case isc_nm_tlsdnssocket: case isc_nm_tlsdnssocket:
r = uv_read_start(&sock->uv_handle.stream, isc__nm_alloc_cb, r = uv_read_start(&sock->uv_handle.stream, isc__nm_alloc_cb,
isc__nm_tlsdns_read_cb); isc__nm_tlsdns_read_cb);
UV_RUNTIME_CHECK(uv_read_start, r);
break; break;
default: default:
INSIST(0); INSIST(0);
ISC_UNREACHABLE(); ISC_UNREACHABLE();
} }
RUNTIME_CHECK(r == 0);
atomic_store(&sock->reading, true); atomic_store(&sock->reading, true);
} }
@ -2264,17 +2272,18 @@ isc__nm_stop_reading(isc_nmsocket_t *sock) {
switch (sock->type) { switch (sock->type) {
case isc_nm_udpsocket: case isc_nm_udpsocket:
r = uv_udp_recv_stop(&sock->uv_handle.udp); r = uv_udp_recv_stop(&sock->uv_handle.udp);
UV_RUNTIME_CHECK(uv_udp_recv_stop, r);
break; break;
case isc_nm_tcpsocket: case isc_nm_tcpsocket:
case isc_nm_tcpdnssocket: case isc_nm_tcpdnssocket:
case isc_nm_tlsdnssocket: case isc_nm_tlsdnssocket:
r = uv_read_stop(&sock->uv_handle.stream); r = uv_read_stop(&sock->uv_handle.stream);
UV_RUNTIME_CHECK(uv_read_stop, r);
break; break;
default: default:
INSIST(0); INSIST(0);
ISC_UNREACHABLE(); ISC_UNREACHABLE();
} }
RUNTIME_CHECK(r == 0);
atomic_store(&sock->reading, false); atomic_store(&sock->reading, false);
} }
@ -3322,12 +3331,12 @@ isc__nm_set_network_buffers(isc_nm_t *nm, uv_handle_t *handle) {
if (recv_buffer_size > 0) { if (recv_buffer_size > 0) {
int r = uv_recv_buffer_size(handle, &recv_buffer_size); int r = uv_recv_buffer_size(handle, &recv_buffer_size);
INSIST(r == 0); UV_RUNTIME_CHECK(uv_recv_buffer_size, r);
} }
if (send_buffer_size > 0) { if (send_buffer_size > 0) {
int r = uv_send_buffer_size(handle, &send_buffer_size); int r = uv_send_buffer_size(handle, &send_buffer_size);
INSIST(r == 0); UV_RUNTIME_CHECK(uv_send_buffer_size, r);
} }
} }
@ -3395,7 +3404,7 @@ isc_nm_work_offload(isc_nm_t *netmgr, isc_nm_workcb_t work_cb,
r = uv_queue_work(&worker->loop, &work->req, isc__nm_work_cb, r = uv_queue_work(&worker->loop, &work->req, isc__nm_work_cb,
isc__nm_after_work_cb); isc__nm_after_work_cb);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_queue_work, r);
} }
void void

View File

@ -137,11 +137,11 @@ tcp_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) {
RUNTIME_CHECK(result == ISC_R_SUCCESS); RUNTIME_CHECK(result == ISC_R_SUCCESS);
r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp); r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_tcp_init, r);
uv_handle_set_data(&sock->uv_handle.handle, sock); uv_handle_set_data(&sock->uv_handle.handle, sock);
r = uv_timer_init(&worker->loop, &sock->timer); r = uv_timer_init(&worker->loop, &sock->timer);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_timer_init, r);
r = uv_tcp_open(&sock->uv_handle.tcp, sock->fd); r = uv_tcp_open(&sock->uv_handle.tcp, sock->fd);
if (r != 0) { if (r != 0) {
@ -521,14 +521,14 @@ isc__nm_async_tcplisten(isc__networker_t *worker, isc__netievent_t *ev0) {
/* TODO: set min mss */ /* TODO: set min mss */
r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp); r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_tcp_init, r);
uv_handle_set_data(&sock->uv_handle.handle, sock); uv_handle_set_data(&sock->uv_handle.handle, sock);
/* This keeps the socket alive after everything else is gone */ /* This keeps the socket alive after everything else is gone */
isc__nmsocket_attach(sock, &(isc_nmsocket_t *){ NULL }); isc__nmsocket_attach(sock, &(isc_nmsocket_t *){ NULL });
r = uv_timer_init(&worker->loop, &sock->timer); r = uv_timer_init(&worker->loop, &sock->timer);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_timer_init, r);
uv_handle_set_data((uv_handle_t *)&sock->timer, sock); uv_handle_set_data((uv_handle_t *)&sock->timer, sock);
@ -971,11 +971,11 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) {
worker = &csock->mgr->workers[isc_nm_tid()]; worker = &csock->mgr->workers[isc_nm_tid()];
r = uv_tcp_init(&worker->loop, &csock->uv_handle.tcp); r = uv_tcp_init(&worker->loop, &csock->uv_handle.tcp);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_tcp_init, r);
uv_handle_set_data(&csock->uv_handle.handle, csock); uv_handle_set_data(&csock->uv_handle.handle, csock);
r = uv_timer_init(&worker->loop, &csock->timer); r = uv_timer_init(&worker->loop, &csock->timer);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_timer_init, r);
uv_handle_set_data((uv_handle_t *)&csock->timer, csock); uv_handle_set_data((uv_handle_t *)&csock->timer, csock);
r = uv_accept(&ssock->uv_handle.stream, &csock->uv_handle.stream); r = uv_accept(&ssock->uv_handle.stream, &csock->uv_handle.stream);

View File

@ -102,11 +102,11 @@ tcpdns_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) {
atomic_store(&sock->connecting, true); atomic_store(&sock->connecting, true);
r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp); r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_tcp_init, r);
uv_handle_set_data(&sock->uv_handle.handle, sock); uv_handle_set_data(&sock->uv_handle.handle, sock);
r = uv_timer_init(&worker->loop, &sock->timer); r = uv_timer_init(&worker->loop, &sock->timer);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_timer_init, r);
if (isc__nm_closing(sock)) { if (isc__nm_closing(sock)) {
result = ISC_R_SHUTTINGDOWN; result = ISC_R_SHUTTINGDOWN;
@ -492,13 +492,13 @@ isc__nm_async_tcpdnslisten(isc__networker_t *worker, isc__netievent_t *ev0) {
/* TODO: set min mss */ /* TODO: set min mss */
r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp); r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_tcp_init, r);
uv_handle_set_data(&sock->uv_handle.handle, sock); uv_handle_set_data(&sock->uv_handle.handle, sock);
/* This keeps the socket alive after everything else is gone */ /* This keeps the socket alive after everything else is gone */
isc__nmsocket_attach(sock, &(isc_nmsocket_t *){ NULL }); isc__nmsocket_attach(sock, &(isc_nmsocket_t *){ NULL });
r = uv_timer_init(&worker->loop, &sock->timer); r = uv_timer_init(&worker->loop, &sock->timer);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_timer_init, r);
uv_handle_set_data((uv_handle_t *)&sock->timer, sock); uv_handle_set_data((uv_handle_t *)&sock->timer, sock);
LOCK(&sock->parent->lock); LOCK(&sock->parent->lock);
@ -963,11 +963,11 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) {
worker = &csock->mgr->workers[csock->tid]; worker = &csock->mgr->workers[csock->tid];
r = uv_tcp_init(&worker->loop, &csock->uv_handle.tcp); r = uv_tcp_init(&worker->loop, &csock->uv_handle.tcp);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_tcp_init, r);
uv_handle_set_data(&csock->uv_handle.handle, csock); uv_handle_set_data(&csock->uv_handle.handle, csock);
r = uv_timer_init(&worker->loop, &csock->timer); r = uv_timer_init(&worker->loop, &csock->timer);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_timer_init, r);
uv_handle_set_data((uv_handle_t *)&csock->timer, csock); uv_handle_set_data((uv_handle_t *)&csock->timer, csock);
r = uv_accept(&ssock->uv_handle.stream, &csock->uv_handle.stream); r = uv_accept(&ssock->uv_handle.stream, &csock->uv_handle.stream);
@ -1162,7 +1162,7 @@ isc__nm_async_tcpdnssend(isc__networker_t *worker, isc__netievent_t *ev0) {
bufs[0].base = uvreq->uvbuf.base + (r - 2); bufs[0].base = uvreq->uvbuf.base + (r - 2);
bufs[0].len = uvreq->uvbuf.len - (r - 2); bufs[0].len = uvreq->uvbuf.len - (r - 2);
} else if (r == UV_ENOSYS || r == UV_EAGAIN) { } else if (r == UV_ENOSYS || r == UV_EAGAIN) {
/* uv_try_write not support, send asynchronously */ /* uv_try_write not supported, send asynchronously */
} else { } else {
/* error sending data */ /* error sending data */
result = isc__nm_uverr2result(r); result = isc__nm_uverr2result(r);
@ -1177,12 +1177,9 @@ isc__nm_async_tcpdnssend(isc__networker_t *worker, isc__netievent_t *ev0) {
} }
return; return;
fail: fail:
if (result != ISC_R_SUCCESS) {
isc__nm_incstats(sock, STATID_SENDFAIL); isc__nm_incstats(sock, STATID_SENDFAIL);
isc__nm_failed_send_cb(sock, uvreq, result); isc__nm_failed_send_cb(sock, uvreq, result);
}
} }
static void static void

View File

@ -118,11 +118,11 @@ tlsdns_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) {
RUNTIME_CHECK(result == ISC_R_SUCCESS); RUNTIME_CHECK(result == ISC_R_SUCCESS);
r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp); r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_tcp_init, r);
uv_handle_set_data(&sock->uv_handle.handle, sock); uv_handle_set_data(&sock->uv_handle.handle, sock);
r = uv_timer_init(&worker->loop, &sock->timer); r = uv_timer_init(&worker->loop, &sock->timer);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_timer_init, r);
uv_handle_set_data((uv_handle_t *)&sock->timer, sock); uv_handle_set_data((uv_handle_t *)&sock->timer, sock);
if (isc__nm_closing(sock)) { if (isc__nm_closing(sock)) {
@ -564,13 +564,13 @@ isc__nm_async_tlsdnslisten(isc__networker_t *worker, isc__netievent_t *ev0) {
/* TODO: set min mss */ /* TODO: set min mss */
r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp); r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_tcp_init, r);
uv_handle_set_data(&sock->uv_handle.handle, sock); uv_handle_set_data(&sock->uv_handle.handle, sock);
/* This keeps the socket alive after everything else is gone */ /* This keeps the socket alive after everything else is gone */
isc__nmsocket_attach(sock, &(isc_nmsocket_t *){ NULL }); isc__nmsocket_attach(sock, &(isc_nmsocket_t *){ NULL });
r = uv_timer_init(&worker->loop, &sock->timer); r = uv_timer_init(&worker->loop, &sock->timer);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_timer_init, r);
uv_handle_set_data((uv_handle_t *)&sock->timer, sock); uv_handle_set_data((uv_handle_t *)&sock->timer, sock);
LOCK(&sock->parent->lock); LOCK(&sock->parent->lock);
@ -1188,7 +1188,7 @@ tls_cycle_output(isc_nmsocket_t *sock) {
isc__nm_uvreq_t *req = NULL; isc__nm_uvreq_t *req = NULL;
size_t bytes; size_t bytes;
int rv; int rv;
int err; int r;
if (sock->tls.senddata.base != NULL || if (sock->tls.senddata.base != NULL ||
sock->tls.senddata.length > 0) { sock->tls.senddata.length > 0) {
@ -1212,34 +1212,38 @@ tls_cycle_output(isc_nmsocket_t *sock) {
RUNTIME_CHECK(rv == 1); RUNTIME_CHECK(rv == 1);
INSIST((size_t)pending == bytes); INSIST((size_t)pending == bytes);
err = uv_try_write(&sock->uv_handle.stream, &req->uvbuf, 1); r = uv_try_write(&sock->uv_handle.stream, &req->uvbuf, 1);
if (err == pending) { if (r == pending) {
/* Wrote everything, restart */ /* Wrote everything, restart */
isc__nm_uvreq_put(&req, sock); isc__nm_uvreq_put(&req, sock);
free_senddata(sock); free_senddata(sock);
continue; continue;
} }
if (err > 0) { if (r > 0) {
/* Partial write, send rest asynchronously */ /* Partial write, send rest asynchronously */
memmove(req->uvbuf.base, req->uvbuf.base + err, memmove(req->uvbuf.base, req->uvbuf.base + r,
req->uvbuf.len - err); req->uvbuf.len - r);
req->uvbuf.len = req->uvbuf.len - err; req->uvbuf.len = req->uvbuf.len - r;
} else if (err == UV_ENOSYS || err == UV_EAGAIN) { } else if (r == UV_ENOSYS || r == UV_EAGAIN) {
/* uv_try_write is not supported, send /* uv_try_write is not supported, send
* asynchronously */ * asynchronously */
} else { } else {
result = isc__nm_uverr2result(err); result = isc__nm_uverr2result(r);
isc__nm_uvreq_put(&req, sock); isc__nm_uvreq_put(&req, sock);
free_senddata(sock); free_senddata(sock);
break; break;
} }
err = uv_write(&req->uv_req.write, &sock->uv_handle.stream, r = uv_write(&req->uv_req.write, &sock->uv_handle.stream,
&req->uvbuf, 1, tls_write_cb); &req->uvbuf, 1, tls_write_cb);
if (r < 0) {
INSIST(err == 0); result = isc__nm_uverr2result(r);
isc__nm_uvreq_put(&req, sock);
free_senddata(sock);
break;
}
break; break;
} }
@ -1469,11 +1473,11 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) {
worker = &csock->mgr->workers[csock->tid]; worker = &csock->mgr->workers[csock->tid];
r = uv_tcp_init(&worker->loop, &csock->uv_handle.tcp); r = uv_tcp_init(&worker->loop, &csock->uv_handle.tcp);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_tcp_init, r);
uv_handle_set_data(&csock->uv_handle.handle, csock); uv_handle_set_data(&csock->uv_handle.handle, csock);
r = uv_timer_init(&worker->loop, &csock->timer); r = uv_timer_init(&worker->loop, &csock->timer);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_timer_init, r);
uv_handle_set_data((uv_handle_t *)&csock->timer, csock); uv_handle_set_data((uv_handle_t *)&csock->timer, csock);
r = uv_accept(&ssock->uv_handle.stream, &csock->uv_handle.stream); r = uv_accept(&ssock->uv_handle.stream, &csock->uv_handle.stream);

View File

@ -262,11 +262,11 @@ route_connect_direct(isc_nmsocket_t *sock) {
atomic_store(&sock->connecting, true); atomic_store(&sock->connecting, true);
r = uv_udp_init(&worker->loop, &sock->uv_handle.udp); r = uv_udp_init(&worker->loop, &sock->uv_handle.udp);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_udp_init, r);
uv_handle_set_data(&sock->uv_handle.handle, sock); uv_handle_set_data(&sock->uv_handle.handle, sock);
r = uv_timer_init(&worker->loop, &sock->timer); r = uv_timer_init(&worker->loop, &sock->timer);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_timer_init, r);
uv_handle_set_data((uv_handle_t *)&sock->timer, sock); uv_handle_set_data((uv_handle_t *)&sock->timer, sock);
if (isc__nm_closing(sock)) { if (isc__nm_closing(sock)) {
@ -436,13 +436,13 @@ isc__nm_async_udplisten(isc__networker_t *worker, isc__netievent_t *ev0) {
uv_init_flags |= UV_UDP_RECVMMSG; uv_init_flags |= UV_UDP_RECVMMSG;
#endif #endif
r = uv_udp_init_ex(&worker->loop, &sock->uv_handle.udp, uv_init_flags); r = uv_udp_init_ex(&worker->loop, &sock->uv_handle.udp, uv_init_flags);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_udp_init_ex, r);
uv_handle_set_data(&sock->uv_handle.handle, sock); uv_handle_set_data(&sock->uv_handle.handle, sock);
/* This keeps the socket alive after everything else is gone */ /* This keeps the socket alive after everything else is gone */
isc__nmsocket_attach(sock, &(isc_nmsocket_t *){ NULL }); isc__nmsocket_attach(sock, &(isc_nmsocket_t *){ NULL });
r = uv_timer_init(&worker->loop, &sock->timer); r = uv_timer_init(&worker->loop, &sock->timer);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_timer_init, r);
uv_handle_set_data((uv_handle_t *)&sock->timer, sock); uv_handle_set_data((uv_handle_t *)&sock->timer, sock);
LOCK(&sock->parent->lock); LOCK(&sock->parent->lock);
@ -854,11 +854,11 @@ udp_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) {
atomic_store(&sock->connecting, true); atomic_store(&sock->connecting, true);
r = uv_udp_init(&worker->loop, &sock->uv_handle.udp); r = uv_udp_init(&worker->loop, &sock->uv_handle.udp);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_udp_init, r);
uv_handle_set_data(&sock->uv_handle.handle, sock); uv_handle_set_data(&sock->uv_handle.handle, sock);
r = uv_timer_init(&worker->loop, &sock->timer); r = uv_timer_init(&worker->loop, &sock->timer);
RUNTIME_CHECK(r == 0); UV_RUNTIME_CHECK(uv_timer_init, r);
uv_handle_set_data((uv_handle_t *)&sock->timer, sock); uv_handle_set_data((uv_handle_t *)&sock->timer, sock);
if (isc__nm_closing(sock)) { if (isc__nm_closing(sock)) {