aboutsummaryrefslogtreecommitdiff
path: root/src/core/aio.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2020-05-06 22:07:42 -0700
committerGarrett D'Amore <garrett@damore.org>2020-05-17 18:32:11 -0700
commitb7a11a0e9e5655da3198e36495d143ea03de91bb (patch)
tree02773c4d8fd8417aee7a5908decc53422748ef10 /src/core/aio.c
parent1a00f65db42d4c92eee28356daa08c9adf4408fe (diff)
downloadnng-b7a11a0e9e5655da3198e36495d143ea03de91bb.tar.gz
nng-b7a11a0e9e5655da3198e36495d143ea03de91bb.tar.bz2
nng-b7a11a0e9e5655da3198e36495d143ea03de91bb.zip
fixes #1236 Deadlock triggered on nng_close
fixes #1219 nng_close occasionally hang on Windows
Diffstat (limited to 'src/core/aio.c')
-rw-r--r--src/core/aio.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/core/aio.c b/src/core/aio.c
index 2e38c323..ea2203f2 100644
--- a/src/core/aio.c
+++ b/src/core/aio.c
@@ -328,6 +328,7 @@ nni_aio_schedule(nni_aio *aio, nni_aio_cancelfn cancelfn, void *data)
// Convert the relative timeout to an absolute timeout.
switch (aio->a_timeout) {
case NNG_DURATION_ZERO:
+ nni_task_abort(&aio->a_task);
return (NNG_ETIMEDOUT);
case NNG_DURATION_INFINITE:
case NNG_DURATION_DEFAULT:
@@ -341,6 +342,7 @@ nni_aio_schedule(nni_aio *aio, nni_aio_cancelfn cancelfn, void *data)
nni_mtx_lock(&nni_aio_lk);
if (aio->a_stop) {
+ nni_task_abort(&aio->a_task);
nni_mtx_unlock(&nni_aio_lk);
return (NNG_ECLOSED);
}