Skip to content

Commit dd9c1bc

Browse files
committed
fix protection for nanoMonitor class
1 parent 6d48b4f commit dd9c1bc

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

src/sync.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,7 @@ SEXP rnng_monitor_create(SEXP socket, SEXP cv) {
563563
monitor->cv = (nano_cv *) NANO_PTR(cv);
564564
nng_socket *sock = (nng_socket *) NANO_PTR(socket);
565565

566+
SEXP xptr;
566567
int xc;
567568

568569
if ((xc = nng_pipe_notify(*sock, NNG_PIPE_EV_ADD_POST, pipe_cb_monitor, monitor)))
@@ -571,10 +572,11 @@ SEXP rnng_monitor_create(SEXP socket, SEXP cv) {
571572
if ((xc = nng_pipe_notify(*sock, NNG_PIPE_EV_REM_POST, pipe_cb_monitor, monitor)))
572573
ERROR_OUT(xc);
573574

574-
SEXP xptr = R_MakeExternalPtr(monitor, nano_MonitorSymbol, R_NilValue);
575+
PROTECT(xptr = R_MakeExternalPtr(monitor, nano_MonitorSymbol, R_NilValue));
575576
R_RegisterCFinalizerEx(xptr, monitor_finalizer, TRUE);
576577
NANO_CLASS2(xptr, "nanoMonitor", "nano");
577578
Rf_setAttrib(xptr, nano_SocketSymbol, Rf_ScalarInteger(nng_socket_id(*sock)));
579+
UNPROTECT(1);
578580

579581
return xptr;
580582

0 commit comments

Comments
 (0)