diff --git a/src/core/aio.c b/src/core/aio.c
index bb8347dd7..8f405ac7b 100644
--- a/src/core/aio.c
+++ b/src/core/aio.c
@@ -187,12 +187,15 @@ nni_aio_stop(nni_aio *aio)
 		nni_aio_expire_q *eq = aio->a_expire_q;
 
 		nni_mtx_lock(&eq->eq_mtx);
+		aio->a_stop       = true;
+		while (aio->a_expiring) {
+			nni_cv_wait(&eq->eq_cv);
+		}
 		nni_aio_expire_rm(aio);
 		fn                = aio->a_cancel_fn;
 		arg               = aio->a_cancel_arg;
 		aio->a_cancel_fn  = NULL;
 		aio->a_cancel_arg = NULL;
-		aio->a_stop       = true;
 		nni_mtx_unlock(&eq->eq_mtx);
 
 		if (fn != NULL) {