From mtmorgan at fhcrc.org  Fri Jul 22 06:29:51 2011
From: mtmorgan at fhcrc.org (Martin Morgan)
Date: Thu, 21 Jul 2011 21:29:51 -0700
Subject: [Rd] reg.finalizer and connection gc -- which runs when (and why)?
Message-ID: <4E28FCBF.1070703@fhcrc.org>

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



[Rd] reg.finalizer and connection gc -- which runs when (and why)?
Martin Morgan