diff options
| author | Garrett D'Amore <garrett@damore.org> | 2021-09-06 13:08:44 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2021-09-06 13:11:57 -0700 |
| commit | 515cdff883f44fbd192f7d957f47d6e2e1385dd0 (patch) | |
| tree | 7fe06f7e71ed2b7bbaf87c9a917437d219c2182f /src/core/socket.c | |
| parent | 468714a51bbc9fc6acf03479b8825ad25a2ffeb0 (diff) | |
| download | nng-515cdff883f44fbd192f7d957f47d6e2e1385dd0.tar.gz nng-515cdff883f44fbd192f7d957f47d6e2e1385dd0.tar.bz2 nng-515cdff883f44fbd192f7d957f47d6e2e1385dd0.zip | |
Eliminate the pipe mutex and use atomic for pipe closed.
This eliminates several mutex operations done each time a pipe
is created or destroyed. For large scale systems this should
reduce overall pressure on the memory subsystem, and scale better
as many threads are coming and going.
This also reduces the overall size of nni_pipe -- on Linux by
36 bytes typically.
Diffstat (limited to 'src/core/socket.c')
| -rw-r--r-- | src/core/socket.c | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/src/core/socket.c b/src/core/socket.c index e376b773..24403ac7 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -1489,9 +1489,7 @@ nni_dialer_add_pipe(nni_dialer *d, void *tpipe) nni_pipe_run_cb(p, NNG_PIPE_EV_ADD_PRE); - nni_mtx_lock(&s->s_mx); - if (p->p_closed) { - nni_mtx_unlock(&s->s_mx); + if (nni_pipe_is_closed(p)) { #ifdef NNG_ENABLE_STATS nni_stat_inc(&d->st_reject, 1); nni_stat_inc(&s->st_rejects, 1); @@ -1499,8 +1497,8 @@ nni_dialer_add_pipe(nni_dialer *d, void *tpipe) nni_pipe_rele(p); return; } + if (p->p_proto_ops.pipe_start(p->p_proto_data) != 0) { - nni_mtx_unlock(&s->s_mx); #ifdef NNG_ENABLE_STATS nni_stat_inc(&d->st_reject, 1); nni_stat_inc(&s->st_rejects, 1); @@ -1509,7 +1507,6 @@ nni_dialer_add_pipe(nni_dialer *d, void *tpipe) nni_pipe_rele(p); return; } - nni_mtx_unlock(&s->s_mx); #ifdef NNG_ENABLE_STATS nni_stat_register(&p->st_root); #endif @@ -1604,9 +1601,7 @@ nni_listener_add_pipe(nni_listener *l, void *tpipe) nni_pipe_run_cb(p, NNG_PIPE_EV_ADD_PRE); - nni_mtx_lock(&s->s_mx); - if (p->p_closed) { - nni_mtx_unlock(&s->s_mx); + if (nni_pipe_is_closed(p)) { #ifdef NNG_ENABLE_STATS nni_stat_inc(&l->st_reject, 1); nni_stat_inc(&s->st_rejects, 1); @@ -1615,7 +1610,6 @@ nni_listener_add_pipe(nni_listener *l, void *tpipe) return; } if (p->p_proto_ops.pipe_start(p->p_proto_data) != 0) { - nni_mtx_unlock(&s->s_mx); #ifdef NNG_ENABLE_STATS nni_stat_inc(&l->st_reject, 1); nni_stat_inc(&s->st_rejects, 1); @@ -1624,7 +1618,6 @@ nni_listener_add_pipe(nni_listener *l, void *tpipe) nni_pipe_rele(p); return; } - nni_mtx_unlock(&s->s_mx); #ifdef NNG_ENABLE_STATS nni_stat_register(&p->st_root); #endif |
