From 59abfb87aa2d369331e2a21429c9f00205588a7b Mon Sep 17 00:00:00 2001 From: shikokuchuo <53399081+shikokuchuo@users.noreply.github.com> Date: Mon, 2 Dec 2024 22:37:49 +0000 Subject: [PATCH 1/2] limit activating interrupt monitoring for recv_aio() --- src/aio.c | 29 +++++++++++++++++++++++++++-- src/core.c | 2 +- src/nanonext.h | 2 +- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/aio.c b/src/aio.c index 59a3650e9..2ad76ae93 100644 --- a/src/aio.c +++ b/src/aio.c @@ -53,6 +53,24 @@ static void isaio_complete(void *arg) { } +static void raio_complete(void *arg) { + + nano_aio *raio = (nano_aio *) arg; + int res = nng_aio_result(raio->aio); + if (res == 0) { + nng_msg *msg = nng_aio_get_msg(raio->aio); + raio->data = msg; + nng_pipe p = nng_msg_get_pipe(msg); + res = - (int) p.id; + } + + raio->result = res; + + if (raio->cb != NULL) + later2(raio_invoke_cb, raio->cb); + +} + static void iraio_complete(void *arg) { nano_aio *iaio = (nano_aio *) arg; @@ -500,7 +518,14 @@ SEXP rnng_send_aio(SEXP con, SEXP data, SEXP mode, SEXP timeout, SEXP pipe, SEXP SEXP rnng_recv_aio(SEXP con, SEXP mode, SEXP timeout, SEXP cvar, SEXP bytes, SEXP clo) { const nng_duration dur = timeout == R_NilValue ? NNG_DURATION_DEFAULT : (nng_duration) nano_integer(timeout); - const int signal = NANO_TAG(cvar) == nano_CvSymbol; + int signal, interrupt; + if (cvar == R_NilValue) { + signal = 0; + interrupt = 0; + } else { + signal = NANO_TAG(cvar) == nano_CvSymbol; + interrupt = 1 - signal; + } nano_cv *ncv = signal ? (nano_cv *) NANO_PTR(cvar) : NULL; nano_aio *raio; SEXP aio, env, fun; @@ -516,7 +541,7 @@ SEXP rnng_recv_aio(SEXP con, SEXP mode, SEXP timeout, SEXP cvar, SEXP bytes, SEX raio->mode = mod; raio->cb = NULL; - if ((xc = nng_aio_alloc(&raio->aio, signal ? raio_complete_signal : raio_complete, raio))) + if ((xc = nng_aio_alloc(&raio->aio, signal ? raio_complete_signal : interrupt ? raio_complete_interrupt : raio_complete, raio))) goto exitlevel1; nng_aio_set_timeout(raio->aio, dur); diff --git a/src/core.c b/src/core.c index c37202671..e4e8bfaea 100644 --- a/src/core.c +++ b/src/core.c @@ -123,7 +123,7 @@ static SEXP nano_outHook(SEXP x, SEXP fun) { // functions with forward definitions in nanonext.h ---------------------------- -void raio_complete(void *arg) { +void raio_complete_interrupt(void *arg) { nano_aio *raio = (nano_aio *) arg; int res = nng_aio_result(raio->aio); diff --git a/src/nanonext.h b/src/nanonext.h index be64f83a3..e394a6f5b 100644 --- a/src/nanonext.h +++ b/src/nanonext.h @@ -283,7 +283,7 @@ SEXP R_mkClosure(SEXP, SEXP, SEXP); SEXP nano_findVarInFrame(const SEXP, const SEXP); SEXP nano_PreserveObject(const SEXP); void nano_ReleaseObject(SEXP); -void raio_complete(void *); +void raio_complete_interrupt(void *); void raio_complete_signal(void *); void sendaio_complete(void *); void cv_finalizer(SEXP); From 55159eff771bf5a2189b019de2de64f36175dd4d Mon Sep 17 00:00:00 2001 From: shikokuchuo <53399081+shikokuchuo@users.noreply.github.com> Date: Mon, 2 Dec 2024 22:45:37 +0000 Subject: [PATCH 2/2] increment dev version --- DESCRIPTION | 2 +- NEWS.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 349359104..5208a1815 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: nanonext Type: Package Title: NNG (Nanomsg Next Gen) Lightweight Messaging Library -Version: 1.3.2.9012 +Version: 1.3.2.9013 Description: R binding for NNG (Nanomsg Next Gen), a successor to ZeroMQ. NNG is a socket library implementing 'Scalability Protocols', a reliable, high-performance standard for common communications patterns including diff --git a/NEWS.md b/NEWS.md index d4f7c1552..14cd81a9d 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# nanonext 1.3.2.9012 (development) +# nanonext 1.3.2.9013 (development) #### New Features