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

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

Reply via email to