aboutsummaryrefslogtreecommitdiff
path: root/src/transport
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2020-12-19 10:21:54 -0800
committerGarrett D'Amore <garrett@damore.org>2020-12-19 12:50:05 -0800
commitd12e169c1e733b255d146847ed57037b74681285 (patch)
treee4a59142a6cf097dfdda8620635f173f53db9e7a /src/transport
parent2033988343bce413763d3e9664e3e8372da48591 (diff)
downloadnng-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.c19
-rw-r--r--src/transport/tcp/tcp.c19
-rw-r--r--src/transport/tls/tls.c25
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);
}