diff options
Diffstat (limited to 'src/transport/ipc')
| -rw-r--r-- | src/transport/ipc/ipc.c | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/src/transport/ipc/ipc.c b/src/transport/ipc/ipc.c index c91606c6..2347e24c 100644 --- a/src/transport/ipc/ipc.c +++ b/src/transport/ipc/ipc.c @@ -418,12 +418,17 @@ static void nni_ipc_pipe_send(void *arg, nni_aio *aio) { nni_ipc_pipe *pipe = arg; + int rv; if (nni_aio_begin(aio) != 0) { return; } nni_mtx_lock(&pipe->mtx); - nni_aio_schedule(aio, nni_ipc_cancel_tx, pipe); + if ((rv = nni_aio_schedule(aio, nni_ipc_cancel_tx, pipe)) != 0) { + nni_mtx_unlock(&pipe->mtx); + nni_aio_finish_error(aio, rv); + return; + } nni_list_append(&pipe->sendq, aio); if (nni_list_first(&pipe->sendq) == aio) { nni_ipc_pipe_dosend(pipe, aio); @@ -474,14 +479,18 @@ static void nni_ipc_pipe_recv(void *arg, nni_aio *aio) { nni_ipc_pipe *pipe = arg; + int rv; if (nni_aio_begin(aio) != 0) { return; } nni_mtx_lock(&pipe->mtx); - // Transports never have a zero length timeout. - (void) nni_aio_schedule(aio, nni_ipc_cancel_rx, pipe); + if ((rv = nni_aio_schedule(aio, nni_ipc_cancel_rx, pipe)) != 0) { + nni_mtx_unlock(&pipe->mtx); + nni_aio_finish_error(aio, rv); + return; + } nni_list_append(&pipe->recvq, aio); if (nni_list_first(&pipe->recvq) == aio) { @@ -496,11 +505,17 @@ nni_ipc_pipe_start(void *arg, nni_aio *aio) nni_ipc_pipe *pipe = arg; nni_aio * negaio; nni_iov iov; + int rv; if (nni_aio_begin(aio) != 0) { return; } nni_mtx_lock(&pipe->mtx); + if ((rv = nni_aio_schedule(aio, nni_ipc_cancel_start, pipe)) != 0) { + nni_mtx_unlock(&pipe->mtx); + nni_aio_finish_error(aio, rv); + return; + } pipe->txhead[0] = 0; pipe->txhead[1] = 'S'; pipe->txhead[2] = 'P'; @@ -517,7 +532,6 @@ nni_ipc_pipe_start(void *arg, nni_aio *aio) iov.iov_len = 8; iov.iov_buf = &pipe->txhead[0]; nni_aio_set_iov(negaio, 1, &iov); - nni_aio_schedule(aio, nni_ipc_cancel_start, pipe); nni_plat_ipc_pipe_send(pipe->ipp, negaio); nni_mtx_unlock(&pipe->mtx); } @@ -728,6 +742,7 @@ static void nni_ipc_ep_accept(void *arg, nni_aio *aio) { nni_ipc_ep *ep = arg; + int rv; if (nni_aio_begin(aio) != 0) { return; @@ -735,7 +750,11 @@ nni_ipc_ep_accept(void *arg, nni_aio *aio) nni_mtx_lock(&ep->mtx); NNI_ASSERT(ep->user_aio == NULL); - nni_aio_schedule(aio, nni_ipc_cancel_ep, ep); + if ((rv = nni_aio_schedule(aio, nni_ipc_cancel_ep, ep)) != 0) { + nni_mtx_unlock(&ep->mtx); + nni_aio_finish_error(aio, rv); + return; + } ep->user_aio = aio; nni_plat_ipc_ep_accept(ep->iep, ep->aio); @@ -746,6 +765,7 @@ static void nni_ipc_ep_connect(void *arg, nni_aio *aio) { nni_ipc_ep *ep = arg; + int rv; if (nni_aio_begin(aio) != 0) { return; @@ -753,7 +773,11 @@ nni_ipc_ep_connect(void *arg, nni_aio *aio) nni_mtx_lock(&ep->mtx); NNI_ASSERT(ep->user_aio == NULL); - nni_aio_schedule(aio, nni_ipc_cancel_ep, ep); + if ((rv = nni_aio_schedule(aio, nni_ipc_cancel_ep, ep)) != 0) { + nni_mtx_unlock(&ep->mtx); + nni_aio_finish_error(aio, rv); + return; + } ep->user_aio = aio; nni_plat_ipc_ep_connect(ep->iep, ep->aio); |
