summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-12-03 22:46:48 -0500
committerGarrett D'Amore <garrett@damore.org>2024-12-07 09:18:47 -0500
commit0f5c2f763966b3caedbfc8a9eadff49ac9bd3a79 (patch)
treec2fa39f719e184d8571c3ef033e5978bb877b5d5
parent3163a56e06a58abb10c753fc77da388234d580c2 (diff)
downloadnng-0f5c2f763966b3caedbfc8a9eadff49ac9bd3a79.tar.gz
nng-0f5c2f763966b3caedbfc8a9eadff49ac9bd3a79.tar.bz2
nng-0f5c2f763966b3caedbfc8a9eadff49ac9bd3a79.zip
windows ipc: check the return value of nni_aio_schedule
This hopefully addresses a long standing bug with Windows IPC sometimes hanging on shut down.
-rw-r--r--src/platform/windows/win_ipclisten.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/platform/windows/win_ipclisten.c b/src/platform/windows/win_ipclisten.c
index e81f4b46..1f5edd08 100644
--- a/src/platform/windows/win_ipclisten.c
+++ b/src/platform/windows/win_ipclisten.c
@@ -265,6 +265,7 @@ static void
ipc_listener_accept(void *arg, nni_aio *aio)
{
ipc_listener *l = arg;
+ int rv;
if (nni_aio_begin(aio) != 0) {
return;
}
@@ -274,10 +275,13 @@ ipc_listener_accept(void *arg, nni_aio *aio)
nni_aio_finish_error(aio, NNG_ESTATE);
return;
}
- nni_aio_schedule(aio, ipc_accept_cancel, l);
- nni_list_append(&l->aios, aio);
- if (nni_list_first(&l->aios) == aio) {
- ipc_accept_start(l);
+ if ((rv = nni_aio_schedule(aio, ipc_accept_cancel, l)) != 0) {
+ nni_aio_finish_error(aio, rv);
+ } else {
+ nni_list_append(&l->aios, aio);
+ if (nni_list_first(&l->aios) == aio) {
+ ipc_accept_start(l);
+ }
}
nni_mtx_unlock(&l->mtx);
}