diff options
| author | Garrett D'Amore <garrett@damore.org> | 2020-12-19 10:21:54 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2020-12-19 12:50:05 -0800 |
| commit | d12e169c1e733b255d146847ed57037b74681285 (patch) | |
| tree | e4a59142a6cf097dfdda8620635f173f53db9e7a /src/transport | |
| parent | 2033988343bce413763d3e9664e3e8372da48591 (diff) | |
| download | nng-d12e169c1e733b255d146847ed57037b74681285.tar.gz nng-d12e169c1e733b255d146847ed57037b74681285.tar.bz2 nng-d12e169c1e733b255d146847ed57037b74681285.zip | |
fixes #1372 nni_reap could be smaller
Diffstat (limited to 'src/transport')
| -rw-r--r-- | src/transport/ipc/ipc.c | 19 | ||||
| -rw-r--r-- | src/transport/tcp/tcp.c | 19 | ||||
| -rw-r--r-- | src/transport/tls/tls.c | 25 |
3 files changed, 48 insertions, 15 deletions
diff --git a/src/transport/ipc/ipc.c b/src/transport/ipc/ipc.c index 9e75f13a..efaa823c 100644 --- a/src/transport/ipc/ipc.c +++ b/src/transport/ipc/ipc.c @@ -36,7 +36,7 @@ struct ipc_pipe { nni_pipe * pipe; nni_list_node node; nni_atomic_flag reaped; - nni_reap_item reap; + nni_reap_node reap; uint8_t tx_head[1 + sizeof(uint64_t)]; uint8_t rx_head[1 + sizeof(uint64_t)]; size_t got_tx_head; @@ -69,7 +69,7 @@ struct ipc_ep { nni_list busy_pipes; // busy pipes -- ones passed to socket nni_list wait_pipes; // pipes waiting to match to socket nni_list neg_pipes; // pipes busy negotiating - nni_reap_item reap; + nni_reap_node reap; #ifdef NNG_ENABLE_STATS nni_stat_item st_rcv_max; #endif @@ -80,8 +80,19 @@ static void ipc_pipe_recv_start(ipc_pipe *p); static void ipc_pipe_send_cb(void *); static void ipc_pipe_recv_cb(void *); static void ipc_pipe_neg_cb(void *); +static void ipc_pipe_fini(void *); static void ipc_ep_fini(void *); +static nni_reap_list ipc_ep_reap_list = { + .rl_offset = offsetof(ipc_ep, reap), + .rl_func = ipc_ep_fini, +}; + +static nni_reap_list ipc_pipe_reap_list = { + .rl_offset = offsetof(ipc_pipe, reap), + .rl_func = ipc_pipe_fini, +}; + static int ipc_tran_init(void) { @@ -139,7 +150,7 @@ ipc_pipe_fini(void *arg) nni_list_node_remove(&p->node); ep->ref_cnt--; if (ep->fini && (ep->ref_cnt == 0)) { - nni_reap(&ep->reap, ipc_ep_fini, ep); + nni_reap(&ipc_ep_reap_list, ep); } nni_mtx_unlock(&ep->mtx); } @@ -161,7 +172,7 @@ ipc_pipe_reap(ipc_pipe *p) if (p->conn != NULL) { nng_stream_close(p->conn); } - nni_reap(&p->reap, ipc_pipe_fini, p); + nni_reap(&ipc_pipe_reap_list, p); } } diff --git a/src/transport/tcp/tcp.c b/src/transport/tcp/tcp.c index cf0bfeb1..524c6988 100644 --- a/src/transport/tcp/tcp.c +++ b/src/transport/tcp/tcp.c @@ -32,7 +32,7 @@ struct tcptran_pipe { nni_list_node node; tcptran_ep * ep; nni_atomic_flag reaped; - nni_reap_item reap; + nni_reap_node reap; uint8_t txlen[sizeof(uint64_t)]; uint8_t rxlen[sizeof(uint64_t)]; size_t gottxhead; @@ -65,7 +65,7 @@ struct tcptran_ep { nni_list busypipes; // busy pipes -- ones passed to socket nni_list waitpipes; // pipes waiting to match to socket nni_list negopipes; // pipes busy negotiating - nni_reap_item reap; + nni_reap_node reap; nng_stream_dialer * dialer; nng_stream_listener *listener; @@ -80,6 +80,17 @@ static void tcptran_pipe_send_cb(void *); static void tcptran_pipe_recv_cb(void *); static void tcptran_pipe_nego_cb(void *); static void tcptran_ep_fini(void *); +static void tcptran_pipe_fini(void *); + +static nni_reap_list tcptran_ep_reap_list = { + .rl_offset = offsetof(tcptran_ep, reap), + .rl_func = tcptran_ep_fini, +}; + +static nni_reap_list tcptran_pipe_reap_list = { + .rl_offset = offsetof (tcptran_pipe, reap), + .rl_func = tcptran_pipe_fini, +}; static int tcptran_init(void) @@ -139,7 +150,7 @@ tcptran_pipe_fini(void *arg) nni_list_node_remove(&p->node); ep->refcnt--; if (ep->fini && (ep->refcnt == 0)) { - nni_reap(&ep->reap, tcptran_ep_fini, ep); + nni_reap(&tcptran_ep_reap_list, ep); } nni_mtx_unlock(&ep->mtx); } @@ -160,7 +171,7 @@ tcptran_pipe_reap(tcptran_pipe *p) if (p->conn != NULL) { nng_stream_close(p->conn); } - nni_reap(&p->reap, tcptran_pipe_fini, p); + nni_reap(&tcptran_pipe_reap_list, p); } } diff --git a/src/transport/tls/tls.c b/src/transport/tls/tls.c index 62393d22..b6623733 100644 --- a/src/transport/tls/tls.c +++ b/src/transport/tls/tls.c @@ -40,7 +40,7 @@ struct tlstran_pipe { tlstran_ep * ep; nni_sockaddr sa; nni_atomic_flag reaped; - nni_reap_item reap; + nni_reap_node reap; uint8_t txlen[sizeof(uint64_t)]; uint8_t rxlen[sizeof(uint64_t)]; size_t gottxhead; @@ -66,7 +66,7 @@ struct tlstran_ep { int authmode; nni_url * url; nni_list pipes; - nni_reap_item reap; + nni_reap_node reap; nng_stream_dialer * dialer; nng_stream_listener *listener; nni_aio * useraio; @@ -87,6 +87,17 @@ static void tlstran_pipe_send_cb(void *); static void tlstran_pipe_recv_cb(void *); static void tlstran_pipe_nego_cb(void *); static void tlstran_ep_fini(void *); +static void tlstran_pipe_fini(void *); + +static nni_reap_list tlstran_ep_reap_list = { + .rl_offset = offsetof(tlstran_ep, reap), + .rl_func = tlstran_ep_fini, +}; + +static nni_reap_list tlstran_pipe_reap_list = { + .rl_offset = offsetof(tlstran_pipe, reap), + .rl_func = tlstran_pipe_fini, +}; static int tlstran_init(void) @@ -141,7 +152,7 @@ tlstran_pipe_fini(void *arg) nni_list_node_remove(&p->node); ep->refcnt--; if (ep->fini && (ep->refcnt == 0)) { - nni_reap(&ep->reap, tlstran_ep_fini, ep); + nni_reap(&tlstran_ep_reap_list, ep); } nni_mtx_unlock(&ep->mtx); } @@ -186,7 +197,7 @@ tlstran_pipe_reap(tlstran_pipe *p) if (p->tls != NULL) { nng_stream_close(p->tls); } - nni_reap(&p->reap, tlstran_pipe_fini, p); + nni_reap(&tlstran_pipe_reap_list, p); } } @@ -952,9 +963,9 @@ tlstran_ep_init_listener(void **lp, nni_url *url, nni_listener *nlistener) if ((rv != 0) || ((rv = nng_stream_listener_alloc_url(&ep->listener, url)) != 0) || - ((rv = nni_stream_listener_set(ep->listener, - NNG_OPT_TLS_AUTH_MODE, &ep->authmode, sizeof(ep->authmode), - NNI_TYPE_INT32)) != 0)) { + ((rv = nni_stream_listener_set(ep->listener, NNG_OPT_TLS_AUTH_MODE, + &ep->authmode, sizeof(ep->authmode), NNI_TYPE_INT32)) != + 0)) { tlstran_ep_fini(ep); return (rv); } |
