From 0aa1de1316b46bb4af23fdf26759bca08008eaf5 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Wed, 4 Apr 2018 09:41:12 -0700 Subject: fixes #324 nni_aio_set_synch leads to race condition fixes #325 synchronous aio completion crash fixes #327 move nni_clock() operations to outside the nni_aio_lk. This work was done for the context tree, and is necessary to properly enable that branch. --- src/transport/ipc/ipc.c | 6 ++---- src/transport/tcp/tcp.c | 6 ++---- src/transport/tls/tls.c | 6 ++---- src/transport/zerotier/zerotier.c | 1 - 4 files changed, 6 insertions(+), 13 deletions(-) (limited to 'src/transport') diff --git a/src/transport/ipc/ipc.c b/src/transport/ipc/ipc.c index e2bb5f99..98d3f177 100644 --- a/src/transport/ipc/ipc.c +++ b/src/transport/ipc/ipc.c @@ -252,8 +252,7 @@ nni_ipc_pipe_send_cb(void *arg) n = nni_msg_len(msg); nni_aio_set_msg(aio, NULL); nni_msg_free(msg); - nni_aio_set_synch(aio); - nni_aio_finish(aio, 0, n); + nni_aio_finish_synch(aio, 0, n); } static void @@ -341,8 +340,7 @@ nni_ipc_pipe_recv_cb(void *arg) nni_mtx_unlock(&pipe->mtx); nni_aio_set_msg(aio, msg); - nni_aio_set_synch(aio); - nni_aio_finish(aio, 0, nni_msg_len(msg)); + nni_aio_finish_synch(aio, 0, nni_msg_len(msg)); return; recv_error: diff --git a/src/transport/tcp/tcp.c b/src/transport/tcp/tcp.c index 7f819d4f..9db5b016 100644 --- a/src/transport/tcp/tcp.c +++ b/src/transport/tcp/tcp.c @@ -250,8 +250,7 @@ nni_tcp_pipe_send_cb(void *arg) n = nni_msg_len(msg); nni_aio_set_msg(aio, NULL); nni_msg_free(msg); - nni_aio_set_synch(aio); - nni_aio_finish(aio, 0, n); + nni_aio_finish_synch(aio, 0, n); } static void @@ -321,9 +320,8 @@ nni_tcp_pipe_recv_cb(void *arg) } nni_mtx_unlock(&p->mtx); - nni_aio_set_synch(aio); nni_aio_set_msg(aio, msg); - nni_aio_finish(aio, 0, nni_msg_len(msg)); + nni_aio_finish_synch(aio, 0, nni_msg_len(msg)); return; recv_error: diff --git a/src/transport/tls/tls.c b/src/transport/tls/tls.c index 610a7f7c..a78e8085 100644 --- a/src/transport/tls/tls.c +++ b/src/transport/tls/tls.c @@ -257,8 +257,7 @@ nni_tls_pipe_send_cb(void *arg) n = nni_msg_len(msg); nni_aio_set_msg(aio, NULL); nni_msg_free(msg); - nni_aio_set_synch(aio); - nni_aio_finish(aio, 0, n); + nni_aio_finish_synch(aio, 0, n); } static void @@ -329,9 +328,8 @@ nni_tls_pipe_recv_cb(void *arg) } nni_mtx_unlock(&p->mtx); - nni_aio_set_synch(aio); nni_aio_set_msg(aio, msg); - nni_aio_finish(aio, 0, nni_msg_len(msg)); + nni_aio_finish_synch(aio, 0, nni_msg_len(msg)); return; recv_error: diff --git a/src/transport/zerotier/zerotier.c b/src/transport/zerotier/zerotier.c index da22dc54..9fc0bc62 100644 --- a/src/transport/zerotier/zerotier.c +++ b/src/transport/zerotier/zerotier.c @@ -1368,7 +1368,6 @@ zt_wire_packet_send(ZT_Node *node, void *userptr, void *thr, int64_t socket, // This should be non-blocking/best-effort, so while // not great that we're holding the lock, also not tragic. - nni_aio_set_synch(aio); nni_plat_udp_send(udp, aio); return (0); -- cgit v1.2.3-70-g09d2