aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-12-15 21:23:26 -0800
committerGarrett D'Amore <garrett@damore.org>2024-12-15 21:23:26 -0800
commitab460d51aee7cedd0a8d17553741b3a6dc836dc7 (patch)
treef2214ae3ecbed6110293021620d4328235ef93ee
parenta43eb958e47f4c70725299845a3b7c69bbba9467 (diff)
downloadnng-ab460d51aee7cedd0a8d17553741b3a6dc836dc7.tar.gz
nng-ab460d51aee7cedd0a8d17553741b3a6dc836dc7.tar.bz2
nng-ab460d51aee7cedd0a8d17553741b3a6dc836dc7.zip
transports: all transports use the new inline approach
We can retire the old approach that used separate allocations, and all of the supporting code. This also gives us a more natural signature for the end point initializations.
-rw-r--r--src/core/dialer.c61
-rw-r--r--src/core/listener.c57
-rw-r--r--src/core/pipe.c44
-rw-r--r--src/core/socket.c30
-rw-r--r--src/core/sockimpl.h2
-rw-r--r--src/sp/transport.c3
-rw-r--r--src/sp/transport.h4
-rw-r--r--src/sp/transport/inproc/inproc.c8
-rw-r--r--src/sp/transport/ipc/ipc.c8
-rw-r--r--src/sp/transport/socket/sockfd.c4
-rw-r--r--src/sp/transport/tcp/tcp.c8
-rw-r--r--src/sp/transport/tls/tls.c8
-rw-r--r--src/sp/transport/udp/udp.c8
-rw-r--r--src/sp/transport/ws/websocket.c8
14 files changed, 41 insertions, 212 deletions
diff --git a/src/core/dialer.c b/src/core/dialer.c
index 4b0ad615..78122646 100644
--- a/src/core/dialer.c
+++ b/src/core/dialer.c
@@ -19,7 +19,6 @@
// Functionality related to dialing.
static void dialer_connect_start(nni_dialer *);
static void dialer_connect_cb(void *);
-static void dialer_connect_cb_old(void *);
static void dialer_timer_cb(void *);
static nni_id_map dialers = NNI_ID_MAP_INITIALIZER(1, 0x7fffffff, 0);
@@ -235,20 +234,10 @@ nni_dialer_init(nni_dialer *d, nni_sock *s, nni_sp_tran *tran)
nni_mtx_init(&d->d_mtx);
- if (d->d_ops.d_size != 0) {
- d->d_data = ((uint8_t *) d) + NNI_ALIGN_UP(sizeof(*d));
- dp = d->d_data;
- } else {
- // legacy: remove me when transports converted
- dp = &d->d_data;
- }
+ d->d_data = ((uint8_t *) d) + NNI_ALIGN_UP(sizeof(*d));
+ dp = d->d_data;
- if (tran->tran_pipe->p_size) {
- nni_aio_init(&d->d_con_aio, dialer_connect_cb, d);
- } else {
- // legacy: remove me
- nni_aio_init(&d->d_con_aio, dialer_connect_cb_old, d);
- }
+ nni_aio_init(&d->d_con_aio, dialer_connect_cb, d);
nni_aio_init(&d->d_tmo_aio, dialer_timer_cb, d);
dialer_stats_init(d);
@@ -452,50 +441,6 @@ dialer_connect_cb(void *arg)
}
static void
-dialer_connect_cb_old(void *arg)
-{
- nni_dialer *d = arg;
- nni_aio *aio = &d->d_con_aio;
- nni_aio *user_aio;
- int rv;
-
- nni_mtx_lock(&d->d_mtx);
- user_aio = d->d_user_aio;
- d->d_user_aio = NULL;
- nni_mtx_unlock(&d->d_mtx);
-
- switch ((rv = nni_aio_result(aio))) {
- case 0:
-#ifdef NNG_ENABLE_STATS
- nni_stat_inc(&d->st_connect, 1);
-#endif
- nni_dialer_add_pipe(d, nni_aio_get_output(aio, 0));
- break;
- case NNG_ECLOSED: // No further action.
- case NNG_ECANCELED: // No further action.
- nni_dialer_bump_error(d, rv);
- break;
- case NNG_ECONNREFUSED:
- case NNG_ETIMEDOUT:
- default:
- nng_log_warn("NNG-CONN-FAIL",
- "Failed connecting socket<%u>: %s", nni_sock_id(d->d_sock),
- nng_strerror(rv));
-
- nni_dialer_bump_error(d, rv);
- if (user_aio == NULL) {
- nni_dialer_timer_start(d);
- } else {
- nni_atomic_flag_reset(&d->d_started);
- }
- break;
- }
- if (user_aio != NULL) {
- nni_aio_finish(user_aio, rv, 0);
- }
-}
-
-static void
dialer_connect_start(nni_dialer *d)
{
d->d_ops.d_connect(d->d_data, &d->d_con_aio);
diff --git a/src/core/listener.c b/src/core/listener.c
index 28b7bc6f..c212ce91 100644
--- a/src/core/listener.c
+++ b/src/core/listener.c
@@ -22,7 +22,6 @@
static void listener_accept_start(nni_listener *);
static void listener_accept_cb(void *);
-static void listener_accept_cb_old(void *);
static void listener_timer_cb(void *);
static nni_id_map listeners = NNI_ID_MAP_INITIALIZER(1, 0x7fffffff, 0);
@@ -230,22 +229,13 @@ nni_listener_init(nni_listener *l, nni_sock *s, nni_sp_tran *tran)
NNI_LIST_NODE_INIT(&l->l_node);
NNI_LIST_INIT(&l->l_pipes, nni_pipe, p_ep_node);
- if (tran->tran_pipe->p_size) {
- nni_aio_init(&l->l_acc_aio, listener_accept_cb, l);
- } else {
- nni_aio_init(&l->l_acc_aio, listener_accept_cb_old, l);
- }
+ nni_aio_init(&l->l_acc_aio, listener_accept_cb, l);
nni_aio_init(&l->l_tmo_aio, listener_timer_cb, l);
listener_stats_init(l);
- if (l->l_ops.l_size != 0) {
- l->l_data = ((uint8_t *) l) + NNI_ALIGN_UP(sizeof(*l));
- lp = l->l_data;
- } else {
- // legacy: remove me when transports converted
- lp = &l->l_data;
- }
+ l->l_data = ((uint8_t *) l) + NNI_ALIGN_UP(sizeof(*l));
+ lp = l->l_data;
rv = l->l_ops.l_init(lp, &l->l_url, l);
@@ -444,47 +434,6 @@ listener_accept_cb(void *arg)
}
static void
-listener_accept_cb_old(void *arg)
-{
- nni_listener *l = arg;
- nni_aio *aio = &l->l_acc_aio;
- int rv;
-
- switch ((rv = nni_aio_result(aio))) {
- case 0:
-#ifdef NNG_ENABLE_STATS
- nni_stat_inc(&l->st_accept, 1);
-#endif
- nni_listener_add_pipe(l, nni_aio_get_output(aio, 0));
- listener_accept_start(l);
- break;
- case NNG_ECONNABORTED: // remote condition, no cool down
- case NNG_ECONNRESET: // remote condition, no cool down
- case NNG_ETIMEDOUT: // No need to sleep, we timed out already.
- case NNG_EPEERAUTH: // peer validation failure
- nng_log_warn("NNG-ACCEPT-FAIL",
- "Failed accepting for socket<%u>: %s",
- nni_sock_id(l->l_sock), nng_strerror(rv));
- nni_listener_bump_error(l, rv);
- listener_accept_start(l);
- break;
- case NNG_ECLOSED: // no further action
- case NNG_ECANCELED: // no further action
- nni_listener_bump_error(l, rv);
- break;
- default:
- // We don't really know why we failed, but we back off
- // here. This is because errors here are probably due
- // to system failures (resource exhaustion) and we hope
- // by not thrashing we give the system a chance to
- // recover. 100 ms is enough to cool down.
- nni_listener_bump_error(l, rv);
- nni_sleep_aio(100, &l->l_tmo_aio);
- break;
- }
-}
-
-static void
listener_accept_start(nni_listener *l)
{
// Call with the listener lock held.
diff --git a/src/core/pipe.c b/src/core/pipe.c
index eaf49af9..dac24140 100644
--- a/src/core/pipe.c
+++ b/src/core/pipe.c
@@ -240,7 +240,7 @@ pipe_stats_init(nni_pipe *p)
static int
pipe_create(nni_pipe **pp, nni_sock *sock, nni_sp_tran *tran, nni_dialer *d,
- nni_listener *l, void *tran_data)
+ nni_listener *l)
{
nni_pipe *p;
int rv1, rv2, rv3;
@@ -253,11 +253,6 @@ pipe_create(nni_pipe **pp, nni_sock *sock, nni_sp_tran *tran, nni_dialer *d,
NNI_ALIGN_UP(tops->p_size);
if ((p = nni_zalloc(sz)) == NULL) {
- // TODO: remove when all transports converted
- // to use p_size.
- if (tran_data != NULL) {
- tops->p_fini(tran_data);
- }
return (NNG_ENOMEM);
}
@@ -279,10 +274,7 @@ pipe_create(nni_pipe **pp, nni_sock *sock, nni_sp_tran *tran, nni_dialer *d,
NNI_LIST_NODE_INIT(&p->p_ep_node);
uint8_t *proto_data = (uint8_t *) p + NNI_ALIGN_UP(sizeof(*p));
-
- if (tran_data == NULL) {
- tran_data = proto_data + NNI_ALIGN_UP(pops->pipe_size);
- }
+ uint8_t *tran_data = proto_data + NNI_ALIGN_UP(pops->pipe_size);
nni_pipe_add(p);
p->p_tran_data = tran_data;
@@ -309,34 +301,6 @@ pipe_create(nni_pipe **pp, nni_sock *sock, nni_sp_tran *tran, nni_dialer *d,
}
int
-nni_pipe_create_dialer(nni_pipe **pp, nni_dialer *d, void *tran_data)
-{
- int rv;
- nni_sp_tran *tran = d->d_tran;
- nni_pipe *p;
-
- if ((rv = pipe_create(&p, d->d_sock, tran, d, NULL, tran_data)) != 0) {
- return (rv);
- }
- *pp = p;
- return (0);
-}
-
-int
-nni_pipe_create_listener(nni_pipe **pp, nni_listener *l, void *tran_data)
-{
- int rv;
- nni_sp_tran *tran = l->l_tran;
- nni_pipe *p;
-
- if ((rv = pipe_create(&p, l->l_sock, tran, NULL, l, tran_data)) != 0) {
- return (rv);
- }
- *pp = p;
- return (0);
-}
-
-int
nni_pipe_alloc_dialer(void **datap, nni_dialer *d)
{
int rv;
@@ -344,7 +308,7 @@ nni_pipe_alloc_dialer(void **datap, nni_dialer *d)
nni_sock *s = d->d_sock;
nni_pipe *p;
- if ((rv = pipe_create(&p, s, tran, d, NULL, NULL)) != 0) {
+ if ((rv = pipe_create(&p, s, tran, d, NULL)) != 0) {
return (rv);
}
*datap = p->p_tran_data;
@@ -359,7 +323,7 @@ nni_pipe_alloc_listener(void **datap, nni_listener *l)
nni_sock *s = l->l_sock;
nni_pipe *p;
- if ((rv = pipe_create(&p, s, tran, NULL, l, NULL)) != 0) {
+ if ((rv = pipe_create(&p, s, tran, NULL, l)) != 0) {
return (rv);
}
*datap = p->p_tran_data;
diff --git a/src/core/socket.c b/src/core/socket.c
index ec2691a3..6ba5d54e 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -1326,24 +1326,6 @@ dialer_start_pipe(nni_dialer *d, nni_pipe *p)
}
void
-nni_dialer_add_pipe(nni_dialer *d, void *tpipe)
-{
- nni_sock *s = d->d_sock;
- nni_pipe *p;
-
- if (nni_pipe_create_dialer(&p, d, tpipe) != 0) {
- return;
- }
-
- nni_mtx_lock(&s->s_mx);
- d->d_pipe = p;
- d->d_currtime = d->d_inirtime;
- nni_mtx_unlock(&s->s_mx);
-
- dialer_start_pipe(d, p);
-}
-
-void
nni_dialer_shutdown(nni_dialer *d)
{
nni_sock *s = d->d_sock;
@@ -1453,18 +1435,6 @@ listener_start_pipe(nni_listener *l, nni_pipe *p)
}
void
-nni_listener_add_pipe(nni_listener *l, void *tpipe)
-{
- nni_pipe *p;
-
- if (nni_pipe_create_listener(&p, l, tpipe) != 0) {
- return;
- }
-
- listener_start_pipe(l, p);
-}
-
-void
nni_listener_shutdown(nni_listener *l)
{
nni_sock *s = l->l_sock;
diff --git a/src/core/sockimpl.h b/src/core/sockimpl.h
index aeaa369b..3140b97b 100644
--- a/src/core/sockimpl.h
+++ b/src/core/sockimpl.h
@@ -143,8 +143,6 @@ extern void nni_pipe_add(nni_pipe *);
extern void nni_pipe_remove(nni_pipe *);
extern bool nni_pipe_is_closed(nni_pipe *);
extern void nni_pipe_run_cb(nni_pipe *, nng_pipe_ev);
-extern int nni_pipe_create_dialer(nni_pipe **, nni_dialer *, void *);
-extern int nni_pipe_create_listener(nni_pipe **, nni_listener *, void *);
extern void nni_pipe_start(nni_pipe *);
diff --git a/src/sp/transport.c b/src/sp/transport.c
index 178cc748..6d515967 100644
--- a/src/sp/transport.c
+++ b/src/sp/transport.c
@@ -22,6 +22,7 @@ void
nni_sp_tran_register(nni_sp_tran *tran)
{
#ifndef NDEBUG
+ NNI_ASSERT(tran->tran_pipe->p_size != 0);
NNI_ASSERT(tran->tran_pipe->p_init != NULL);
NNI_ASSERT(tran->tran_pipe->p_fini != NULL);
NNI_ASSERT(tran->tran_pipe->p_stop != NULL);
@@ -31,6 +32,7 @@ nni_sp_tran_register(nni_sp_tran *tran)
NNI_ASSERT(tran->tran_pipe->p_peer != NULL);
if (tran->tran_dialer != NULL) {
+ NNI_ASSERT(tran->tran_dialer->d_size != 0);
NNI_ASSERT(tran->tran_dialer->d_init != NULL);
NNI_ASSERT(tran->tran_dialer->d_fini != NULL);
NNI_ASSERT(tran->tran_dialer->d_close != NULL);
@@ -41,6 +43,7 @@ nni_sp_tran_register(nni_sp_tran *tran)
}
if (tran->tran_listener != NULL) {
+ NNI_ASSERT(tran->tran_listener->l_size != 0);
NNI_ASSERT(tran->tran_listener->l_init != NULL);
NNI_ASSERT(tran->tran_listener->l_fini != NULL);
NNI_ASSERT(tran->tran_listener->l_bind != NULL);
diff --git a/src/sp/transport.h b/src/sp/transport.h
index 6d1e0d4a..28f1535b 100644
--- a/src/sp/transport.h
+++ b/src/sp/transport.h
@@ -32,7 +32,7 @@ struct nni_sp_dialer_ops {
// d_init creates a vanilla dialer. The value created is
// used for the first argument for all other dialer functions.
- int (*d_init)(void **, nng_url *, nni_dialer *);
+ int (*d_init)(void *, nng_url *, nni_dialer *);
// d_fini frees the resources associated with the dialer.
// The dialer will already have been closed.
@@ -78,7 +78,7 @@ struct nni_sp_listener_ops {
// l_init creates a vanilla listener. The value created is
// used for the first argument for all other listener functions.
- int (*l_init)(void **, nng_url *, nni_listener *);
+ int (*l_init)(void *, nng_url *, nni_listener *);
// l_fini frees the resources associated with the listener.
// The listener will already have been closed.
diff --git a/src/sp/transport/inproc/inproc.c b/src/sp/transport/inproc/inproc.c
index 1dec45e3..90317499 100644
--- a/src/sp/transport/inproc/inproc.c
+++ b/src/sp/transport/inproc/inproc.c
@@ -283,9 +283,9 @@ inproc_ep_init(inproc_ep *ep, nni_sock *sock, const nng_url *url)
}
static int
-inproc_dialer_init(void **epp, nng_url *url, nni_dialer *ndialer)
+inproc_dialer_init(void *arg, nng_url *url, nni_dialer *ndialer)
{
- inproc_ep *ep = (void *) epp;
+ inproc_ep *ep = arg;
ep->dialer = ndialer;
inproc_ep_init(ep, nni_dialer_sock(ndialer), url);
@@ -293,9 +293,9 @@ inproc_dialer_init(void **epp, nng_url *url, nni_dialer *ndialer)
}
static int
-inproc_listener_init(void **epp, nng_url *url, nni_listener *nlistener)
+inproc_listener_init(void *arg, nng_url *url, nni_listener *nlistener)
{
- inproc_ep *ep = (void *) epp;
+ inproc_ep *ep = arg;
ep->listener = nlistener;
inproc_ep_init(ep, nni_listener_sock(nlistener), url);
diff --git a/src/sp/transport/ipc/ipc.c b/src/sp/transport/ipc/ipc.c
index 4a1ce0d2..68f148f8 100644
--- a/src/sp/transport/ipc/ipc.c
+++ b/src/sp/transport/ipc/ipc.c
@@ -803,9 +803,9 @@ ipc_ep_init(ipc_ep *ep, nni_sock *sock, void (*conn_cb)(void *))
}
static int
-ipc_ep_init_dialer(void **dp, nng_url *url, nni_dialer *dialer)
+ipc_ep_init_dialer(void *arg, nng_url *url, nni_dialer *dialer)
{
- ipc_ep *ep = (void *) dp;
+ ipc_ep *ep = arg;
int rv;
nni_sock *sock = nni_dialer_sock(dialer);
@@ -822,9 +822,9 @@ ipc_ep_init_dialer(void **dp, nng_url *url, nni_dialer *dialer)
}
static int
-ipc_ep_init_listener(void **dp, nng_url *url, nni_listener *listener)
+ipc_ep_init_listener(void *arg, nng_url *url, nni_listener *listener)
{
- ipc_ep *ep = (void *) dp;
+ ipc_ep *ep = arg;
int rv;
nni_sock *sock = nni_listener_sock(listener);
diff --git a/src/sp/transport/socket/sockfd.c b/src/sp/transport/socket/sockfd.c
index d066f837..646151ed 100644
--- a/src/sp/transport/socket/sockfd.c
+++ b/src/sp/transport/socket/sockfd.c
@@ -694,9 +694,9 @@ error:
}
static int
-sfd_tran_listener_init(void **lp, nng_url *url, nni_listener *nlistener)
+sfd_tran_listener_init(void *arg, nng_url *url, nni_listener *nlistener)
{
- sfd_tran_ep *ep = (void *) lp;
+ sfd_tran_ep *ep = arg;
int rv;
nni_sock *sock = nni_listener_sock(nlistener);
diff --git a/src/sp/transport/tcp/tcp.c b/src/sp/transport/tcp/tcp.c
index 730834da..4c0f76bd 100644
--- a/src/sp/transport/tcp/tcp.c
+++ b/src/sp/transport/tcp/tcp.c
@@ -793,9 +793,9 @@ tcptran_ep_init(tcptran_ep *ep, nni_sock *sock, void (*conn_cb)(void *))
}
static int
-tcptran_dialer_init(void **dp, nng_url *url, nni_dialer *ndialer)
+tcptran_dialer_init(void *arg, nng_url *url, nni_dialer *ndialer)
{
- tcptran_ep *ep = (void *) dp;
+ tcptran_ep *ep = arg;
int rv;
nni_sock *sock = nni_dialer_sock(ndialer);
@@ -823,9 +823,9 @@ tcptran_dialer_init(void **dp, nng_url *url, nni_dialer *ndialer)
}
static int
-tcptran_listener_init(void **lp, nng_url *url, nni_listener *nlistener)
+tcptran_listener_init(void *arg, nng_url *url, nni_listener *nlistener)
{
- tcptran_ep *ep = (void *) lp;
+ tcptran_ep *ep = arg;
int rv;
nni_sock *sock = nni_listener_sock(nlistener);
diff --git a/src/sp/transport/tls/tls.c b/src/sp/transport/tls/tls.c
index 37092e17..2f21919d 100644
--- a/src/sp/transport/tls/tls.c
+++ b/src/sp/transport/tls/tls.c
@@ -766,9 +766,9 @@ tlstran_ep_init(tlstran_ep *ep, nni_sock *sock, nni_cb conn_cb)
}
static int
-tlstran_ep_init_dialer(void **dp, nng_url *url, nni_dialer *ndialer)
+tlstran_ep_init_dialer(void *arg, nng_url *url, nni_dialer *ndialer)
{
- tlstran_ep *ep = (void *) dp;
+ tlstran_ep *ep = arg;
int rv;
nni_sock *sock = nni_dialer_sock(ndialer);
@@ -795,9 +795,9 @@ tlstran_ep_init_dialer(void **dp, nng_url *url, nni_dialer *ndialer)
}
static int
-tlstran_ep_init_listener(void **lp, nng_url *url, nni_listener *nlistener)
+tlstran_ep_init_listener(void *arg, nng_url *url, nni_listener *nlistener)
{
- tlstran_ep *ep = (void *) lp;
+ tlstran_ep *ep = arg;
int rv;
nni_sock *sock = nni_listener_sock(nlistener);
diff --git a/src/sp/transport/udp/udp.c b/src/sp/transport/udp/udp.c
index 9f79a66f..6c0df5c4 100644
--- a/src/sp/transport/udp/udp.c
+++ b/src/sp/transport/udp/udp.c
@@ -1387,9 +1387,9 @@ udp_check_url(nng_url *url, bool listen)
}
static int
-udp_dialer_init(void **dp, nng_url *url, nni_dialer *ndialer)
+udp_dialer_init(void *arg, nng_url *url, nni_dialer *ndialer)
{
- udp_ep *ep = (void *) dp;
+ udp_ep *ep = arg;
int rv;
nni_sock *sock = nni_dialer_sock(ndialer);
@@ -1406,9 +1406,9 @@ udp_dialer_init(void **dp, nng_url *url, nni_dialer *ndialer)
}
static int
-udp_listener_init(void **lp, nng_url *url, nni_listener *nlistener)
+udp_listener_init(void *arg, nng_url *url, nni_listener *nlistener)
{
- udp_ep *ep = (void *) lp;
+ udp_ep *ep = arg;
int rv;
nni_sock *sock = nni_listener_sock(nlistener);
diff --git a/src/sp/transport/ws/websocket.c b/src/sp/transport/ws/websocket.c
index 276a8b16..33388fc9 100644
--- a/src/sp/transport/ws/websocket.c
+++ b/src/sp/transport/ws/websocket.c
@@ -520,9 +520,9 @@ error:
}
static int
-wstran_dialer_init(void **dp, nng_url *url, nni_dialer *ndialer)
+wstran_dialer_init(void *arg, nng_url *url, nni_dialer *ndialer)
{
- ws_dialer *d = (void *) dp;
+ ws_dialer *d = arg;
nni_sock *s = nni_dialer_sock(ndialer);
int rv;
char name[64];
@@ -550,9 +550,9 @@ wstran_dialer_init(void **dp, nng_url *url, nni_dialer *ndialer)
}
static int
-wstran_listener_init(void **lp, nng_url *url, nni_listener *listener)
+wstran_listener_init(void *arg, nng_url *url, nni_listener *listener)
{
- ws_listener *l = (void *) lp;
+ ws_listener *l = arg;
int rv;
nni_sock *s = nni_listener_sock(listener);
char name[64];