From 44a6de38d240143ec2b4bb6f6457bae81271820a Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Mon, 6 Mar 2017 01:12:00 -0800 Subject: Pair protocol now callback driven. --- src/core/aio.h | 3 ++- src/core/msgqueue.c | 17 +++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) (limited to 'src/core') diff --git a/src/core/aio.h b/src/core/aio.h index 80a3ac02..96b04857 100644 --- a/src/core/aio.h +++ b/src/core/aio.h @@ -55,7 +55,8 @@ extern int nni_aio_init(nni_aio *, nni_cb, void *); // nni_aio_fini finalizes the aio, releasing resources (locks) // associated with it. The caller is responsible for ensuring that any -// associated I/O is unscheduled or complete. +// associated I/O is unscheduled or complete. This is safe to call +// on zero'd memory. extern void nni_aio_fini(nni_aio *); // nni_aio_result returns the result code (0 on success, or an NNG errno) diff --git a/src/core/msgqueue.c b/src/core/msgqueue.c index dc3f84f9..147c0e20 100644 --- a/src/core/msgqueue.c +++ b/src/core/msgqueue.c @@ -517,11 +517,13 @@ nni_msgq_run_timeout(void *arg) naio = nni_list_first(&mq->mq_aio_getq); while ((aio = naio) != NULL) { naio = nni_list_next(&mq->mq_aio_getq, aio); - if (now >= aio->a_expire) { + if (aio->a_expire == NNI_TIME_ZERO) { + nni_list_remove(&mq->mq_aio_getq, aio); + nni_aio_finish(aio, NNG_EAGAIN, 0); + } else if (now >= aio->a_expire) { nni_list_remove(&mq->mq_aio_getq, aio); nni_aio_finish(aio, NNG_ETIMEDOUT, 0); - } - if (exp > aio->a_expire) { + } else if (exp > aio->a_expire) { exp = aio->a_expire; } } @@ -529,11 +531,13 @@ nni_msgq_run_timeout(void *arg) naio = nni_list_first(&mq->mq_aio_putq); while ((aio = naio) != NULL) { naio = nni_list_next(&mq->mq_aio_putq, aio); - if (now >= aio->a_expire) { + if (aio->a_expire == NNI_TIME_ZERO) { + nni_list_remove(&mq->mq_aio_putq, aio); + nni_aio_finish(aio, NNG_EAGAIN, 0); + } else if (now >= aio->a_expire) { nni_list_remove(&mq->mq_aio_putq, aio); nni_aio_finish(aio, NNG_ETIMEDOUT, 0); - } - if (exp > aio->a_expire) { + } else if (exp > aio->a_expire) { exp = aio->a_expire; } } @@ -748,6 +752,7 @@ nni_msgq_put_until(nni_msgq *mq, nni_msg *msg, nni_time expire) aio.a_msg = msg; nni_msgq_aio_put(mq, &aio); nni_aio_wait(&aio); + rv = nni_aio_result(&aio); nni_aio_fini(&aio); return (rv); } -- cgit v1.2.3-70-g09d2