From 762be97bd97fca47f1129fd15fc36ad03669f69f Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Sat, 25 May 2024 18:56:32 -0700 Subject: windows: drop the hEvent initialization for win_io structures. We use overlapped I/O, so we don't need a separate hEvent. --- src/platform/windows/win_impl.h | 5 ++--- src/platform/windows/win_io.c | 21 ++++----------------- src/platform/windows/win_ipcconn.c | 11 ++--------- src/platform/windows/win_ipclisten.c | 17 ++++++----------- src/platform/windows/win_tcpconn.c | 10 +++------- src/platform/windows/win_tcpdial.c | 5 +---- src/platform/windows/win_tcplisten.c | 20 +++++++++++--------- src/platform/windows/win_udp.c | 20 ++++++++++---------- 8 files changed, 39 insertions(+), 70 deletions(-) (limited to 'src') diff --git a/src/platform/windows/win_impl.h b/src/platform/windows/win_impl.h index 7842bdb4..1354709b 100644 --- a/src/platform/windows/win_impl.h +++ b/src/platform/windows/win_impl.h @@ -1,5 +1,5 @@ // -// Copyright 2021 Staysail Systems, Inc. +// Copyright 2024 Staysail Systems, Inc. // Copyright 2018 Capitar IT Group BV // // This software is supplied under the terms of the MIT License, a @@ -122,8 +122,7 @@ extern void nni_win_udp_sysfini(void); extern int nni_win_resolv_sysinit(void); extern void nni_win_resolv_sysfini(void); -extern int nni_win_io_init(nni_win_io *, nni_win_io_cb, void *); -extern void nni_win_io_fini(nni_win_io *); +extern void nni_win_io_init(nni_win_io *, nni_win_io_cb, void *); extern int nni_win_io_register(HANDLE); diff --git a/src/platform/windows/win_io.c b/src/platform/windows/win_io.c index 1e985130..47dd7408 100644 --- a/src/platform/windows/win_io.c +++ b/src/platform/windows/win_io.c @@ -60,27 +60,14 @@ nni_win_io_register(HANDLE h) return (0); } -int +void nni_win_io_init(nni_win_io *io, nni_win_io_cb cb, void *ptr) { ZeroMemory(&io->olpd, sizeof(io->olpd)); - io->cb = cb; - io->ptr = ptr; - io->aio = NULL; - io->olpd.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - if (io->olpd.hEvent == NULL) { - return (nni_win_error(GetLastError())); - } - return (0); -} - -void -nni_win_io_fini(nni_win_io *io) -{ - if (io->olpd.hEvent != NULL) { - CloseHandle((HANDLE) io->olpd.hEvent); - } + io->cb = cb; + io->ptr = ptr; + io->aio = NULL; } int diff --git a/src/platform/windows/win_ipcconn.c b/src/platform/windows/win_ipcconn.c index 3c005398..269eff8d 100644 --- a/src/platform/windows/win_ipcconn.c +++ b/src/platform/windows/win_ipcconn.c @@ -316,9 +316,6 @@ ipc_conn_reap(void *arg) } nni_mtx_unlock(&c->mtx); - nni_win_io_fini(&c->recv_io); - nni_win_io_fini(&c->send_io); - if (c->f != INVALID_HANDLE_VALUE) { CloseHandle(c->f); } @@ -401,7 +398,6 @@ nni_win_ipc_init( nng_stream **connp, HANDLE p, const nng_sockaddr *sa, bool dialer) { ipc_conn *c; - int rv; if ((c = NNI_ALLOC_STRUCT(c)) == NULL) { return (NNG_ENOMEM); @@ -420,11 +416,8 @@ nni_win_ipc_init( c->stream.s_get = ipc_get; c->stream.s_set = ipc_set; - if (((rv = nni_win_io_init(&c->recv_io, ipc_recv_cb, c)) != 0) || - ((rv = nni_win_io_init(&c->send_io, ipc_send_cb, c)) != 0)) { - ipc_free(c); - return (rv); - } + nni_win_io_init(&c->recv_io, ipc_recv_cb, c); + nni_win_io_init(&c->send_io, ipc_send_cb, c); c->f = p; *connp = (void *) c; diff --git a/src/platform/windows/win_ipclisten.c b/src/platform/windows/win_ipclisten.c index 07969e97..89fe7268 100644 --- a/src/platform/windows/win_ipclisten.c +++ b/src/platform/windows/win_ipclisten.c @@ -1,5 +1,5 @@ // -// Copyright 2021 Staysail Systems, Inc. +// Copyright 2024 Staysail Systems, Inc. // Copyright 2018 Capitar IT Group BV // Copyright 2019 Devolutions // @@ -17,7 +17,7 @@ typedef struct { nng_stream_listener sl; - char * path; + char *path; bool started; bool closed; HANDLE f; @@ -33,7 +33,7 @@ typedef struct { static void ipc_accept_done(ipc_listener *l, int rv) { - nni_aio * aio; + nni_aio *aio; HANDLE f; nng_stream *c; @@ -138,7 +138,7 @@ static int ipc_listener_set_sec_desc(void *arg, const void *buf, size_t sz, nni_type t) { ipc_listener *l = arg; - void * desc; + void *desc; int rv; if ((rv = nni_copyin_ptr(&desc, buf, sz, t)) != 0) { @@ -200,7 +200,7 @@ ipc_listener_listen(void *arg) ipc_listener *l = arg; int rv; HANDLE f; - char * path; + char *path; nni_mtx_lock(&l->mtx); if (l->started) { @@ -310,7 +310,6 @@ ipc_listener_free(void *arg) nni_cv_wait(&l->cv); } nni_mtx_unlock(&l->mtx); - nni_win_io_fini(&l->io); nni_strfree(l->path); nni_cv_fini(&l->cv); nni_mtx_fini(&l->mtx); @@ -321,7 +320,6 @@ int nni_ipc_listener_alloc(nng_stream_listener **lp, const nng_url *url) { ipc_listener *l; - int rv; if ((strcmp(url->u_scheme, "ipc") != 0) || (url->u_path == NULL) || (strlen(url->u_path) == 0) || @@ -331,10 +329,7 @@ nni_ipc_listener_alloc(nng_stream_listener **lp, const nng_url *url) if ((l = NNI_ALLOC_STRUCT(l)) == NULL) { return (NNG_ENOMEM); } - if ((rv = nni_win_io_init(&l->io, ipc_accept_cb, l)) != 0) { - NNI_FREE_STRUCT(l); - return (rv); - } + nni_win_io_init(&l->io, ipc_accept_cb, l); l->started = false; l->closed = false; l->sec_attr.nLength = sizeof(l->sec_attr); diff --git a/src/platform/windows/win_tcpconn.c b/src/platform/windows/win_tcpconn.c index fad7c495..2a2106a1 100644 --- a/src/platform/windows/win_tcpconn.c +++ b/src/platform/windows/win_tcpconn.c @@ -409,10 +409,6 @@ tcp_free(void *arg) } nni_mtx_unlock(&c->mtx); - nni_win_io_fini(&c->recv_io); - nni_win_io_fini(&c->send_io); - nni_win_io_fini(&c->conn_io); - if (c->s != INVALID_SOCKET) { closesocket(c->s); } @@ -448,9 +444,9 @@ nni_win_tcp_init(nni_tcp_conn **connp, SOCKET s) c->ops.s_get = tcp_get; c->ops.s_set = tcp_set; - if (((rv = nni_win_io_init(&c->recv_io, tcp_recv_cb, c)) != 0) || - ((rv = nni_win_io_init(&c->send_io, tcp_send_cb, c)) != 0) || - ((rv = nni_win_io_register((HANDLE) s)) != 0)) { + nni_win_io_init(&c->recv_io, tcp_recv_cb, c); + nni_win_io_init(&c->send_io, tcp_send_cb, c); + if ((rv = nni_win_io_register((HANDLE) s)) != 0) { tcp_free(c); return (rv); } diff --git a/src/platform/windows/win_tcpdial.c b/src/platform/windows/win_tcpdial.c index b4a6d745..bc5d6f5d 100644 --- a/src/platform/windows/win_tcpdial.c +++ b/src/platform/windows/win_tcpdial.c @@ -208,10 +208,7 @@ nni_tcp_dial(nni_tcp_dialer *d, const nni_sockaddr *sa, nni_aio *aio) c->peername = ss; - if ((rv = nni_win_io_init(&c->conn_io, tcp_dial_cb, c)) != 0) { - nni_aio_finish_error(aio, rv); - return; - } + nni_win_io_init(&c->conn_io, tcp_dial_cb, c); nni_mtx_lock(&d->mtx); if (d->closed) { diff --git a/src/platform/windows/win_tcplisten.c b/src/platform/windows/win_tcplisten.c index 7cfef8d2..084c30bd 100644 --- a/src/platform/windows/win_tcplisten.c +++ b/src/platform/windows/win_tcplisten.c @@ -1,5 +1,5 @@ // -// Copyright 2021 Staysail Systems, Inc. +// Copyright 2024 Staysail Systems, Inc. // Copyright 2018 Capitar IT Group BV // Copyright 2018 Devolutions // @@ -81,13 +81,13 @@ tcp_listener_funcs(nni_tcp_listener *l) static void tcp_accept_cb(nni_win_io *io, int rv, size_t cnt) { - nni_tcp_conn * c = io->ptr; + nni_tcp_conn *c = io->ptr; nni_tcp_listener *l = c->listener; - nni_aio * aio; + nni_aio *aio; int len1; int len2; - SOCKADDR * sa1; - SOCKADDR * sa2; + SOCKADDR *sa1; + SOCKADDR *sa2; BOOL nd; BOOL ka; @@ -97,6 +97,7 @@ tcp_accept_cb(nni_win_io *io, int rv, size_t cnt) if ((aio = c->conn_aio) == NULL) { // This case should not occur. The situation would indicate // a case where the connection was accepted already. + NNI_ASSERT(false); nni_mtx_unlock(&l->mtx); return; } @@ -168,6 +169,7 @@ nni_tcp_listener_close(nni_tcp_listener *l) if (!l->closed) { nni_aio *aio; l->closed = true; + closesocket(l->s); NNI_LIST_FOREACH (&l->aios, aio) { nni_tcp_conn *c; @@ -177,7 +179,6 @@ nni_tcp_listener_close(nni_tcp_listener *l) CancelIoEx((HANDLE) c->s, &c->conn_io.olpd); } } - closesocket(l->s); } nni_mtx_unlock(&l->mtx); } @@ -270,7 +271,7 @@ static void tcp_accept_cancel(nni_aio *aio, void *arg, int rv) { nni_tcp_listener *l = arg; - nni_tcp_conn * c; + nni_tcp_conn *c; nni_mtx_lock(&l->mtx); if ((c = nni_aio_get_prov_data(aio)) != NULL) { @@ -322,8 +323,9 @@ nni_tcp_listener_accept(nni_tcp_listener *l, nni_aio *aio) c->listener = l; c->conn_aio = aio; nni_aio_set_prov_data(aio, c); - if (((rv = nni_win_io_init(&c->conn_io, tcp_accept_cb, c)) != 0) || - ((rv = nni_aio_schedule(aio, tcp_accept_cancel, l)) != 0)) { + nni_win_io_init(&c->conn_io, tcp_accept_cb, c); + + if ((rv = nni_aio_schedule(aio, tcp_accept_cancel, l)) != 0) { nni_aio_set_prov_data(aio, NULL); nni_mtx_unlock(&l->mtx); nng_stream_free(&c->ops); diff --git a/src/platform/windows/win_udp.c b/src/platform/windows/win_udp.c index 88f2cd5b..09064e2f 100644 --- a/src/platform/windows/win_udp.c +++ b/src/platform/windows/win_udp.c @@ -1,5 +1,5 @@ // -// Copyright 2020 Staysail Systems, Inc. +// Copyright 2024 Staysail Systems, Inc. // Copyright 2018 Capitar IT Group BV // // This software is supplied under the terms of the MIT License, a @@ -38,7 +38,7 @@ static void udp_recv_start(nni_plat_udp *); int nni_plat_udp_open(nni_plat_udp **udpp, nni_sockaddr *sa) { - nni_plat_udp * u; + nni_plat_udp *u; SOCKADDR_STORAGE ss; int sslen; DWORD no; @@ -67,8 +67,9 @@ nni_plat_udp_open(nni_plat_udp **udpp, nni_sockaddr *sa) (void) setsockopt( u->s, IPPROTO_IPV6, IPV6_V6ONLY, (char *) &no, sizeof(no)); - if (((rv = nni_win_io_init(&u->rxio, udp_recv_cb, u)) != 0) || - ((rv = nni_win_io_register((HANDLE) u->s)) != 0)) { + nni_win_io_init(&u->rxio, udp_recv_cb, u); + + if ((rv = nni_win_io_register((HANDLE) u->s)) != 0) { nni_plat_udp_close(u); return (rv); } @@ -102,7 +103,6 @@ nni_plat_udp_close(nni_plat_udp *u) closesocket(u->s); } - nni_win_io_fini(&u->rxio); nni_mtx_fini(&u->lk); nni_cv_fini(&u->cv); NNI_FREE_STRUCT(u); @@ -115,10 +115,10 @@ nni_plat_udp_send(nni_plat_udp *u, nni_aio *aio) { SOCKADDR_STORAGE to; int tolen; - nng_sockaddr * sa; + nng_sockaddr *sa; unsigned naiov; - nni_iov * aiov; - WSABUF * iov; + nni_iov *aiov; + WSABUF *iov; int rv; DWORD nsent; @@ -191,7 +191,7 @@ udp_recv_cb(nni_win_io *io, int rv, size_t num) { nni_plat_udp *u = io->ptr; nni_sockaddr *sa; - nni_aio * aio; + nni_aio *aio; nni_mtx_lock(&u->lk); if ((aio = nni_list_first(&u->rxq)) == NULL) { @@ -226,7 +226,7 @@ udp_recv_start(nni_plat_udp *u) DWORD flags; nni_iov *aiov; unsigned naiov; - WSABUF * iov; + WSABUF *iov; nni_aio *aio; if ((u->s == INVALID_SOCKET) || (u->closed)) { -- cgit v1.2.3-70-g09d2