From 515cdff883f44fbd192f7d957f47d6e2e1385dd0 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Mon, 6 Sep 2021 13:08:44 -0700 Subject: 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. --- src/core/socket.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) (limited to 'src/core/socket.c') 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 -- cgit v1.2.3-70-g09d2