On 26/03/2012 6:24 AM, Henrik Alsing Friberg wrote:
Hi R-help users..

I mistakenly posted a now rejected bug report
(https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=14855), but the
subject still bugs me..!

If I have a package called MyPackage with C code inside, then library
or require(MyPackage) will call loadNamespace() which will look for
and call:
void R_init_MyPackage(DllInfo *info)

At the end of the R session, the corresponding unload function is
however *not* called.
void R_unload_MyPackage(DllInfo *info)

I use the two functions to call R_cholmod_start(CHM_CM) and
cholmod_finish(CHM_CM) respectively, and I think this might leak
memory if the latter is not called. Firstly, why is one called without
the package maker having to think about it, while the other is not?
Secondly, how do I make sure that the unload function is called --
using either .Last.lib or .onUnload to call unloadNamespace() seems
like a bad idea, as unloadNamespace() is documented to call back to
these hooks (the call cycle would have to by broken by other means)?

You would normally use reg.finalizer() for this, or the C level equivalents (see the section on external pointers in Writing R Extensions).

Duncan Murdoch

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to