aboutsummaryrefslogtreecommitdiff
path: root/src/core/pipe.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2016-12-31 11:53:27 -0800
committerGarrett D'Amore <garrett@damore.org>2016-12-31 11:53:27 -0800
commit8fe11dfb66acfe067b21b6eb47eb9e3928169950 (patch)
treea1a65072783f36fc6743474ada084907e7f8fc14 /src/core/pipe.c
parenteb4474a513981309fa5b46724599fd2d794ac5af (diff)
downloadnng-8fe11dfb66acfe067b21b6eb47eb9e3928169950.tar.gz
nng-8fe11dfb66acfe067b21b6eb47eb9e3928169950.tar.bz2
nng-8fe11dfb66acfe067b21b6eb47eb9e3928169950.zip
Fix races in pipe termination.
Diffstat (limited to 'src/core/pipe.c')
-rw-r--r--src/core/pipe.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/core/pipe.c b/src/core/pipe.c
index 0a3f1d33..b57b7831 100644
--- a/src/core/pipe.c
+++ b/src/core/pipe.c
@@ -98,7 +98,11 @@ nni_pipe_create(nni_pipe **pp, nni_endpt *ep)
if ((p = nni_alloc(sizeof (*p))) == NULL) {
return (NNG_ENOMEM);
}
+ p->p_send_thr = NULL;
+ p->p_recv_thr = NULL;
p->p_trandata = NULL;
+ p->p_active = 0;
+ p->p_abort = 0;
if ((rv = nni_cond_init(&p->p_cv, &sock->s_mx)) != 0) {
nni_free(p, sizeof (*p));
return (rv);
@@ -112,8 +116,6 @@ nni_pipe_create(nni_pipe **pp, nni_endpt *ep)
p->p_sock = sock;
p->p_ops = *ep->ep_ops.ep_pipe_ops;
p->p_ep = ep;
- p->p_active = 0;
- p->p_abort = 0;
if (ep->ep_dialer != NULL) {
ep->ep_pipe = p;
}
@@ -207,7 +209,7 @@ nni_pipe_start(nni_pipe *pipe)
if (rv != 0) {
goto fail;
}
- rv = nni_thread_create(&pipe->p_send_thr, nni_pipe_receiver, pipe);
+ rv = nni_thread_create(&pipe->p_recv_thr, nni_pipe_receiver, pipe);
if (rv != 0) {
goto fail;
}