[Rd] reg.finalizer(): Is it safe for the finalizer function to attach/load a package?
Henrik Bengtsson
hb at biostat.ucsf.edu
Mon Oct 14 00:30:19 CEST 2013
>From the help/docs it is pretty clear that one could/should only
assume that the 'base' namespace is available when a finalizer
function is evaluated. What is not clear to me is whether you can
safely attach/load packages in your finalizer function. For example,
are the following finalizer functions safe?
reg.finalizer(e, function(e, ...) {
library("tcltk")
.Tcl("close $con")
})
and
reg.finalizer(e, function(e, ...) {
tcltk::.Tcl("close $con")
})
What about non-core packages, e.g.
reg.finalizer(e, function(e, ...) {
library("R.oo")
finalize(e)
})
(here finalize() is a generic function, but it's just an example)?.
I'm worried that (re-)attaching packages in a finalizer could be
competing with R's terminating sequence of detaching/unloading
packages. The reason why I believe this, is that 'R CMD check' on
some of my packages occasionally generate:
* checking for unstated dependencies in R code ... WARNING
Error in attachNamespace(ns, pos = pos, dataPath = dataPath, deps) :
namespace is already attached
Warning in function (env) :
Object may not be finalize():d properly because the R.oo package
failed to reload: Package: 0x0000000006a2f1b8
See the information on DESCRIPTION files in the chapter 'Creating R
packages' of the 'Writing R Extensions' manual.
Knowing whether it is considered safe/unsafe to (re-)attach a package
in the finalizer will help me troubleshoot the above and decide on an
alternative design for my finalizers.
Any help/feedback is appreciated.
/Henrik
More information about the R-devel
mailing list