diff options
| author | Garrett D'Amore <garrett@damore.org> | 2017-07-02 12:58:53 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2017-07-02 12:58:53 -0700 |
| commit | 424c2238c97d26d8d5fb30fb1449a96396269da0 (patch) | |
| tree | a5d3ed01e348f4644b06d630a3e92997944152f6 /src/transport/ipc/ipc.c | |
| parent | 53a22a96d49e8b44c7e70b59559db87f57158a82 (diff) | |
| download | nng-424c2238c97d26d8d5fb30fb1449a96396269da0.tar.gz nng-424c2238c97d26d8d5fb30fb1449a96396269da0.tar.bz2 nng-424c2238c97d26d8d5fb30fb1449a96396269da0.zip | |
Transports allocate their pipe structures during connect & accept.
Diffstat (limited to 'src/transport/ipc/ipc.c')
| -rw-r--r-- | src/transport/ipc/ipc.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/transport/ipc/ipc.c b/src/transport/ipc/ipc.c index 7727b375..8cb24b28 100644 --- a/src/transport/ipc/ipc.c +++ b/src/transport/ipc/ipc.c @@ -92,7 +92,7 @@ nni_ipc_pipe_fini(void *arg) static int -nni_ipc_pipe_init(void **argp) +nni_ipc_pipe_init(nni_ipc_pipe **pipep) { nni_ipc_pipe *pipe; int rv; @@ -115,7 +115,7 @@ nni_ipc_pipe_init(void **argp) if (rv != 0) { goto fail; } - *argp = pipe; + *pipep = pipe; return (0); fail: @@ -443,10 +443,10 @@ nni_ipc_negotiate(nni_ipc_pipe *pipe) static int -nni_ipc_ep_connect(void *arg, void *pipearg) +nni_ipc_ep_connect(void *arg, void **pipep) { nni_ipc_ep *ep = arg; - nni_ipc_pipe *pipe = pipearg; + nni_ipc_pipe *pipe; int rv; const char *path; @@ -455,17 +455,24 @@ nni_ipc_ep_connect(void *arg, void *pipearg) } path = ep->addr + strlen("ipc://"); + if ((rv = nni_ipc_pipe_init(&pipe)) != 0) { + return (rv); + } + pipe->proto = ep->proto; pipe->rcvmax = ep->rcvmax; rv = nni_plat_ipc_connect(pipe->isp, path); if (rv != 0) { + nni_ipc_pipe_fini(pipe); return (rv); } if ((rv = nni_ipc_negotiate(pipe)) != 0) { + nni_ipc_pipe_fini(pipe); return (rv); } + *pipep = pipe; return (0); } @@ -491,27 +498,32 @@ nni_ipc_ep_bind(void *arg) static int -nni_ipc_ep_accept(void *arg, void *pipearg) +nni_ipc_ep_accept(void *arg, void **pipep) { nni_ipc_ep *ep = arg; - nni_ipc_pipe *pipe = pipearg; + nni_ipc_pipe *pipe; int rv; + if ((rv = nni_ipc_pipe_init(&pipe)) != 0) { + return (rv); + } pipe->proto = ep->proto; pipe->rcvmax = ep->rcvmax; if ((rv = nni_plat_ipc_accept(pipe->isp, ep->isp)) != 0) { + nni_ipc_pipe_fini(pipe); return (rv); } if ((rv = nni_ipc_negotiate(pipe)) != 0) { + nni_ipc_pipe_fini(pipe); return (rv); } + *pipep = pipe; return (0); } static nni_tran_pipe nni_ipc_pipe_ops = { - .p_init = nni_ipc_pipe_init, .p_fini = nni_ipc_pipe_fini, .p_aio_send = nni_ipc_pipe_aio_send, .p_aio_recv = nni_ipc_pipe_aio_recv, |
