aboutsummaryrefslogtreecommitdiff
path: root/src/sp/transport/ws
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-12-16 00:14:41 -0800
committerGarrett D'Amore <garrett@damore.org>2024-12-16 07:18:54 -0800
commit7c51e7b1807fb2daa214e5bc99799a1327a666c8 (patch)
tree661e730671c822759887fe39d4ba99da93e7965e /src/sp/transport/ws
parent1928588605343ed0406f109a56291e40a405fb40 (diff)
downloadnng-7c51e7b1807fb2daa214e5bc99799a1327a666c8.tar.gz
nng-7c51e7b1807fb2daa214e5bc99799a1327a666c8.tar.bz2
nng-7c51e7b1807fb2daa214e5bc99799a1327a666c8.zip
websocket: stop trying to accept once we're closed
Diffstat (limited to 'src/sp/transport/ws')
-rw-r--r--src/sp/transport/ws/websocket.c18
1 files 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);
}