aboutsummaryrefslogtreecommitdiff
path: root/src/core/socket.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2017-01-18 11:49:05 -0800
committerGarrett D'Amore <garrett@damore.org>2017-01-18 11:49:46 -0800
commite88e28fcf5e5dd5b478d0a7a462836026da975fe (patch)
treeedba090c97d32f07fdb1b46dfe6e107e5e4d9596 /src/core/socket.c
parenta56ce392b5e2c45232a1bd1299d83c215bcd6653 (diff)
downloadnng-e88e28fcf5e5dd5b478d0a7a462836026da975fe.tar.gz
nng-e88e28fcf5e5dd5b478d0a7a462836026da975fe.tar.bz2
nng-e88e28fcf5e5dd5b478d0a7a462836026da975fe.zip
Reduce lock contention and simplify logic for endpoint creation.
Diffstat (limited to 'src/core/socket.c')
-rw-r--r--src/core/socket.c35
1 files changed, 6 insertions, 29 deletions
diff --git a/src/core/socket.c b/src/core/socket.c
index 0ae20a28..d9119a64 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -547,25 +547,14 @@ nni_sock_dial(nni_sock *sock, const char *addr, nni_ep **epp, int flags)
nni_ep *ep;
int rv;
- nni_mtx_lock(&sock->s_mx);
- if (sock->s_closing) {
- nni_mtx_unlock(&sock->s_mx);
- return (NNG_ECLOSED);
- }
if ((rv = nni_ep_create(&ep, sock, addr)) != 0) {
- nni_mtx_unlock(&sock->s_mx);
return (rv);
}
- nni_list_append(&sock->s_eps, ep);
- nni_mtx_unlock(&sock->s_mx);
- rv = nni_ep_dial(ep, flags);
- if (rv != 0) {
+ if ((rv = nni_ep_dial(ep, flags)) != 0) {
nni_ep_close(ep);
- } else {
- if (epp != NULL) {
- *epp = ep;
- }
+ } else if (epp != NULL) {
+ *epp = ep;
}
return (rv);
@@ -578,26 +567,14 @@ nni_sock_listen(nni_sock *sock, const char *addr, nni_ep **epp, int flags)
nni_ep *ep;
int rv;
- nni_mtx_lock(&sock->s_mx);
- if (sock->s_closing) {
- nni_mtx_unlock(&sock->s_mx);
- return (NNG_ECLOSED);
- }
-
if ((rv = nni_ep_create(&ep, sock, addr)) != 0) {
- nni_mtx_unlock(&sock->s_mx);
return (rv);
}
- nni_list_append(&sock->s_eps, ep);
- nni_mtx_unlock(&sock->s_mx);
- rv = nni_ep_listen(ep, flags);
- if (rv != 0) {
+ if ((rv = nni_ep_listen(ep, flags)) != 0) {
nni_ep_close(ep);
- } else {
- if (epp != NULL) {
- *epp = ep;
- }
+ } else if (epp != NULL) {
+ *epp = ep;
}
return (rv);