Hello,

This  is a question that probably reveals my lack of understanding.
In a C function (call it cfunc), i created a SEXP, called S, and then
called R_PreserveObject on S.

I returned the SEXP to the calling R function (call it rfunc). Note, I
didn't call
R_ReleaseObject on S.

v <- .Call("cfunc")

So, are the following  statements correct

1.  S is 'doubly' protected from the GC by  being associated both with 'v'
and because it has been added to the precious list (via a call to
R_PreserveObject without ReleaseObject being called)

2. I have another C function called cfunc2. In cfunc2, I call
R_ReleaseObject on S.  S , however, is still protected from the GC, because
it is associated with 'v'

Is (1) and (2) correct?

I have not used R_protect/unprotect, because if I return from cfunc without
the equivalent number of unprotects, i get 'unbalanced stack' warnings. I'd
rather not have to worry about that because i intend to balance it later.

Regards
Saptarshi

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to