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/platform | |
| 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/platform')
| -rw-r--r-- | src/platform/posix/posix_ipc.h | 2 | ||||
| -rw-r--r-- | src/platform/posix/posix_ipcconn.c | 6 | ||||
| -rw-r--r-- | src/platform/posix/posix_tcp.h | 2 | ||||
| -rw-r--r-- | src/platform/posix/posix_tcpconn.c | 10 | ||||
| -rw-r--r-- | src/platform/windows/win_ipcconn.c | 13 | ||||
| -rw-r--r-- | src/platform/windows/win_tcpdial.c | 11 | ||||
| -rw-r--r-- | src/platform/windows/win_tcplisten.c | 11 |
7 files changed, 40 insertions, 15 deletions
diff --git a/src/platform/posix/posix_ipc.h b/src/platform/posix/posix_ipc.h index 2c2c9af7..4ef5fa80 100644 --- a/src/platform/posix/posix_ipc.h +++ b/src/platform/posix/posix_ipc.h @@ -30,7 +30,7 @@ struct nni_ipc_conn { nni_aio * dial_aio; nni_ipc_dialer *dialer; nng_sockaddr sa; - nni_reap_item reap; + nni_reap_node reap; }; struct nni_ipc_dialer { diff --git a/src/platform/posix/posix_ipcconn.c b/src/platform/posix/posix_ipcconn.c index 825ecd4b..04eddd5f 100644 --- a/src/platform/posix/posix_ipcconn.c +++ b/src/platform/posix/posix_ipcconn.c @@ -493,11 +493,15 @@ ipc_reap(void *arg) NNI_FREE_STRUCT(c); } +static nni_reap_list ipc_reap_list = { + .rl_offset = offsetof(ipc_conn, reap), + .rl_func = ipc_reap, +}; static void ipc_free(void *arg) { ipc_conn *c = arg; - nni_reap(&c->reap, ipc_reap, c); + nni_reap(&ipc_reap_list, c); } static const nni_option ipc_options[] = { diff --git a/src/platform/posix/posix_tcp.h b/src/platform/posix/posix_tcp.h index 87312dff..a8d1308e 100644 --- a/src/platform/posix/posix_tcp.h +++ b/src/platform/posix/posix_tcp.h @@ -25,7 +25,7 @@ struct nni_tcp_conn { nni_mtx mtx; nni_aio * dial_aio; nni_tcp_dialer *dialer; - nni_reap_item reap; + nni_reap_node reap; }; struct nni_tcp_dialer { diff --git a/src/platform/posix/posix_tcpconn.c b/src/platform/posix/posix_tcpconn.c index 9684fe27..2494b05e 100644 --- a/src/platform/posix/posix_tcpconn.c +++ b/src/platform/posix/posix_tcpconn.c @@ -217,11 +217,15 @@ tcp_fini(void *arg) NNI_FREE_STRUCT(c); } +static nni_reap_list tcp_reap_list = { + .rl_offset = offsetof(nni_tcp_conn, reap), + .rl_func = tcp_fini, +}; static void tcp_free(void *arg) { nni_tcp_conn *c = arg; - nni_reap(&c->reap, tcp_fini, arg); + nni_reap(&tcp_reap_list, c); } static void @@ -336,7 +340,7 @@ tcp_get_peername(void *arg, void *buf, size_t *szp, nni_type t) nni_tcp_conn * c = arg; struct sockaddr_storage ss; socklen_t len = sizeof(ss); - int fd = nni_posix_pfd_fd(c->pfd); + int fd = nni_posix_pfd_fd(c->pfd); int rv; nng_sockaddr sa; @@ -355,7 +359,7 @@ tcp_get_sockname(void *arg, void *buf, size_t *szp, nni_type t) nni_tcp_conn * c = arg; struct sockaddr_storage ss; socklen_t len = sizeof(ss); - int fd = nni_posix_pfd_fd(c->pfd); + int fd = nni_posix_pfd_fd(c->pfd); int rv; nng_sockaddr sa; diff --git a/src/platform/windows/win_ipcconn.c b/src/platform/windows/win_ipcconn.c index b8dc62d3..135a961e 100644 --- a/src/platform/windows/win_ipcconn.c +++ b/src/platform/windows/win_ipcconn.c @@ -34,7 +34,7 @@ typedef struct ipc_conn { bool closed; nni_mtx mtx; nni_cv cv; - nni_reap_item reap; + nni_reap_node reap; } ipc_conn; static void @@ -309,8 +309,10 @@ ipc_close(void *arg) } static void -ipc_conn_reap(ipc_conn *c) +ipc_conn_reap(void *arg) { + ipc_conn *c = arg; + nni_mtx_lock(&c->mtx); while ((!nni_list_empty(&c->recv_aios)) || (!nni_list_empty(&c->send_aios))) { @@ -330,13 +332,18 @@ ipc_conn_reap(ipc_conn *c) NNI_FREE_STRUCT(c); } +static nni_reap_list ipc_reap_list = { + .rl_offset = offsetof(ipc_conn, reap), + .rl_func = ipc_conn_reap, +}; + static void ipc_free(void *arg) { ipc_conn *c = arg; ipc_close(c); - nni_reap(&c->reap, (nni_cb) ipc_conn_reap, CONN(c)); + nni_reap(&ipc_reap_list, c); } static int diff --git a/src/platform/windows/win_tcpdial.c b/src/platform/windows/win_tcpdial.c index 12ebdca6..3353d380 100644 --- a/src/platform/windows/win_tcpdial.c +++ b/src/platform/windows/win_tcpdial.c @@ -25,7 +25,7 @@ struct nni_tcp_dialer { SOCKADDR_STORAGE src; // source address size_t srclen; nni_mtx mtx; - nni_reap_item reap; + nni_reap_node reap; }; int @@ -88,6 +88,11 @@ nni_tcp_dialer_close(nni_tcp_dialer *d) nni_mtx_unlock(&d->mtx); } +static nni_reap_list tcp_dialer_reap_list = { + .rl_offset = offsetof(nni_tcp_dialer, reap), + .rl_func = (nni_cb) nni_tcp_dialer_fini, +}; + void nni_tcp_dialer_fini(nni_tcp_dialer *d) { @@ -95,7 +100,7 @@ nni_tcp_dialer_fini(nni_tcp_dialer *d) nni_mtx_lock(&d->mtx); if (!nni_list_empty(&d->aios)) { nni_mtx_unlock(&d->mtx); - nni_reap(&d->reap, (nni_cb) nni_tcp_dialer_fini, d); + nni_reap(&tcp_dialer_reap_list, nni_tcp_dialer_fini); return; } nni_mtx_unlock(&d->mtx); @@ -164,7 +169,7 @@ tcp_dial_cb(nni_win_io *io, int rv, size_t cnt) (void) setsockopt( c->s, IPPROTO_TCP, TCP_NODELAY, (char *) &nd, sizeof(nd)); - len = sizeof (SOCKADDR_STORAGE); + len = sizeof(SOCKADDR_STORAGE); (void) getsockname(c->s, (SOCKADDR *) &c->sockname, &len); nni_aio_set_output(aio, 0, c); diff --git a/src/platform/windows/win_tcplisten.c b/src/platform/windows/win_tcplisten.c index 9c5fec3c..1e87fd31 100644 --- a/src/platform/windows/win_tcplisten.c +++ b/src/platform/windows/win_tcplisten.c @@ -28,7 +28,7 @@ struct nni_tcp_listener { LPFN_GETACCEPTEXSOCKADDRS getacceptexsockaddrs; SOCKADDR_STORAGE ss; nni_mtx mtx; - nni_reap_item reap; + nni_reap_node reap; }; // tcp_listener_funcs looks up function pointers we need for advanced accept @@ -184,6 +184,11 @@ nni_tcp_listener_close(nni_tcp_listener *l) nni_mtx_unlock(&l->mtx); } +static nni_reap_list tcp_listener_reap_list = { + .rl_offset = offsetof(nni_tcp_listener, reap), + .rl_func = (nni_cb) nni_tcp_listener_fini, +}; + void nni_tcp_listener_fini(nni_tcp_listener *l) { @@ -191,7 +196,7 @@ nni_tcp_listener_fini(nni_tcp_listener *l) nni_mtx_lock(&l->mtx); if (!nni_list_empty(&l->aios)) { nni_mtx_unlock(&l->mtx); - nni_reap(&l->reap, (nni_cb) nni_tcp_listener_fini, l); + nni_reap(&tcp_listener_reap_list, l); return; } nni_mtx_unlock(&l->mtx); @@ -302,7 +307,7 @@ nni_tcp_listener_accept(nni_tcp_listener *l, nni_aio *aio) return; } - // Windows requires us to explicity create the socket before + // Windows requires us to explicitly create the socket before // calling accept on it. if ((s = socket(l->ss.ss_family, SOCK_STREAM, 0)) == INVALID_SOCKET) { rv = nni_win_error(GetLastError()); |
