[Rd] reg.finalizer and connection gc -- which runs when (and why)?
Martin Morgan
mtmorgan at fhcrc.org
Fri Jul 22 06:29:51 CEST 2011
With this set-up
options(warn = 1)
tf <- tempfile()
finalizer <- function(obj) {
message("finalizer")
close(obj$f)
}
this code works
ev <- new.env()
ev$f <- file(tf, "w")
reg.finalizer(ev, finalizer)
rm(ev)
gc()
whereas this (reversing the order of file() and reg.finalizer())
ev <- new.env()
reg.finalizer(ev, finalizer)
ev$f <- file(tf, "w")
rm(ev)
produces
> gc()
Warning: closing unused connection 3 (/tmp/Rtmp9CWLtN/file6998ee7b)
finalizer
Error in close.connection(obj$f) : invalid connection
In some respects, it seems like the user should get a chance to clean up
their mess before the system does it for them, so the above seems like a
bug. But maybe there is another way to understand this?
Martin
--
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109
Location: M1-B861
Telephone: 206 667-2793
More information about the R-devel
mailing list