summaryrefslogtreecommitdiff
path: root/src/transport/zerotier
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport/zerotier')
-rw-r--r--src/transport/zerotier/zerotier.c68
1 files changed, 51 insertions, 17 deletions
diff --git a/src/transport/zerotier/zerotier.c b/src/transport/zerotier/zerotier.c
index 54e402be..f7139b94 100644
--- a/src/transport/zerotier/zerotier.c
+++ b/src/transport/zerotier/zerotier.c
@@ -1902,6 +1902,7 @@ static void
zt_pipe_recv(void *arg, nni_aio *aio)
{
zt_pipe *p = arg;
+ int rv;
if (nni_aio_begin(aio) != 0) {
return;
@@ -1912,7 +1913,11 @@ zt_pipe_recv(void *arg, nni_aio *aio)
nni_aio_finish_error(aio, NNG_ECLOSED);
return;
}
- nni_aio_schedule(aio, zt_pipe_cancel_recv, p);
+ if ((rv = nni_aio_schedule(aio, zt_pipe_cancel_recv, p)) != 0) {
+ nni_mtx_unlock(&zt_lk);
+ nni_aio_finish_error(aio, rv);
+ return;
+ }
p->zp_user_rxaio = aio;
zt_pipe_dorecv(p);
nni_mtx_unlock(&zt_lk);
@@ -2049,7 +2054,13 @@ zt_pipe_ping_cb(void *arg)
// going to send a ping. (We don't increment the try count
// unless we actually do send one though.)
if (nni_aio_begin(aio) == 0) {
- nni_aio_schedule(aio, zt_pipe_cancel_ping, p);
+ int rv;
+ rv = nni_aio_schedule(aio, zt_pipe_cancel_ping, p);
+ if (rv != 0) {
+ nni_mtx_unlock(&zt_lk);
+ nni_aio_finish_error(aio, rv);
+ return;
+ }
p->zp_ping_active = 1;
if (now > (p->zp_last_recv + p->zp_ping_time)) {
p->zp_ping_try++;
@@ -2081,10 +2092,15 @@ zt_pipe_start(void *arg, nni_aio *aio)
p->zp_ping_try = 0;
nni_aio_set_timeout(aio, p->zp_ping_time);
if (nni_aio_begin(p->zp_ping_aio) == 0) {
- nni_aio_schedule(
+ int rv;
+ rv = nni_aio_schedule(
p->zp_ping_aio, zt_pipe_cancel_ping, p);
- p->zp_ping_active = 1;
- zt_pipe_send_ping(p);
+ if (rv != 0) {
+ nni_aio_finish_error(p->zp_ping_aio, rv);
+ } else {
+ p->zp_ping_active = 1;
+ zt_pipe_send_ping(p);
+ }
}
}
nni_aio_finish(aio, 0, 0);
@@ -2405,12 +2421,17 @@ static void
zt_ep_accept(void *arg, nni_aio *aio)
{
zt_ep *ep = arg;
+ int rv;
if (nni_aio_begin(aio) != 0) {
return;
}
nni_mtx_lock(&zt_lk);
- nni_aio_schedule(aio, zt_ep_cancel, ep);
+ if ((rv = nni_aio_schedule(aio, zt_ep_cancel, ep)) != 0) {
+ nni_mtx_unlock(&zt_lk);
+ nni_aio_finish_error(aio, rv);
+ return;
+ }
nni_aio_list_append(&ep->ze_aios, aio);
zt_ep_doaccept(ep);
nni_mtx_unlock(&zt_lk);
@@ -2486,10 +2507,14 @@ zt_ep_conn_req_cb(void *arg)
if (nni_list_first(&ep->ze_aios) != NULL) {
nni_aio_set_timeout(aio, ep->ze_conn_time);
if (nni_aio_begin(aio) == 0) {
- nni_aio_schedule(aio, zt_ep_conn_req_cancel, ep);
- ep->ze_creq_active = 1;
- ep->ze_creq_try++;
- zt_ep_send_conn_req(ep);
+ rv = nni_aio_schedule(aio, zt_ep_conn_req_cancel, ep);
+ if (rv != 0) {
+ nni_aio_finish_error(aio, rv);
+ } else {
+ ep->ze_creq_active = 1;
+ ep->ze_creq_try++;
+ zt_ep_send_conn_req(ep);
+ }
}
}
@@ -2523,18 +2548,27 @@ zt_ep_connect(void *arg, nni_aio *aio)
if ((ep->ze_raddr >> 24) == 0) {
ep->ze_raddr |= (ep->ze_ztn->zn_self << zt_port_shift);
}
+ if ((rv = nni_aio_schedule(aio, zt_ep_cancel, ep)) != 0) {
+ nni_aio_finish_error(aio, rv);
+ nni_mtx_unlock(&zt_lk);
+ return;
+ }
nni_aio_list_append(&ep->ze_aios, aio);
ep->ze_running = 1;
- nni_aio_schedule(aio, zt_ep_cancel, ep);
nni_aio_set_timeout(ep->ze_creq_aio, ep->ze_conn_time);
if (nni_aio_begin(ep->ze_creq_aio) == 0) {
- nni_aio_schedule(ep->ze_creq_aio, zt_ep_conn_req_cancel, ep);
- // Send out the first connect message; if not
- // yet attached to network message will be dropped.
- ep->ze_creq_try = 1;
- ep->ze_creq_active = 1;
- zt_ep_send_conn_req(ep);
+ rv = nni_aio_schedule(
+ ep->ze_creq_aio, zt_ep_conn_req_cancel, ep);
+ if (rv != 0) {
+ nni_aio_finish_error(ep->ze_creq_aio, rv);
+ } else {
+ // Send out the first connect message; if not
+ // yet attached to network message will be dropped.
+ ep->ze_creq_try = 1;
+ ep->ze_creq_active = 1;
+ zt_ep_send_conn_req(ep);
+ }
}
nni_mtx_unlock(&zt_lk);
}