From 7c51e7b1807fb2daa214e5bc99799a1327a666c8 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Mon, 16 Dec 2024 00:14:41 -0800 Subject: websocket: stop trying to accept once we're closed --- src/sp/transport/ws/websocket.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/sp/transport/ws/websocket.c b/src/sp/transport/ws/websocket.c index 33388fc9..f962adbf 100644 --- a/src/sp/transport/ws/websocket.c +++ b/src/sp/transport/ws/websocket.c @@ -41,6 +41,7 @@ struct ws_listener { nni_listener *nlistener; nni_list wait_pipes; bool started; + bool closed; }; struct ws_pipe { @@ -452,11 +453,16 @@ wstran_listener_close(void *arg) ws_listener *l = arg; ws_pipe *p; - nni_aio_close(&l->accaio); - NNI_LIST_FOREACH (&l->wait_pipes, p) { - nni_pipe_close(p->npipe); + nni_mtx_lock(&l->mtx); + if (!l->closed) { + l->closed = true; + nni_aio_close(&l->accaio); + NNI_LIST_FOREACH (&l->wait_pipes, p) { + nni_pipe_close(p->npipe); + } + nng_stream_listener_close(l->listener); } - nng_stream_listener_close(l->listener); + nni_mtx_unlock(&l->mtx); } static void @@ -515,7 +521,9 @@ error: nni_aio_list_remove(uaio); nni_aio_finish_error(uaio, rv); } - nng_stream_listener_accept(l->listener, aaio); + if (rv != NNG_ECLOSED) { + nng_stream_listener_accept(l->listener, aaio); + } nni_mtx_unlock(&l->mtx); } -- cgit v1.2.3-70-g09d2