From murdoch at stats.uwo.ca  Tue Jan 16 22:39:02 2007
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Tue, 16 Jan 2007 16:39:02 -0500
Subject: [Rd] on.exit called on loading ?
In-Reply-To: <17837.15696.636229.572815@basebud.nulle.part>
References: <17837.15696.636229.572815@basebud.nulle.part>
Message-ID: <45AD45F6.4070003@stats.uwo.ca>

On 1/16/2007 4:02 PM, Dirk Eddelbuettel wrote:
> I just found out that an .onLoad() function such as this stylized one (where
> I just renamed some identifiers)
> 
> 
> .onLoad <- function(lib, pkg) {
>   require(zoo, quiet=TRUE, warn.conflicts=FALSE)
>   library.dynam("foolib", pkg, lib )
>   if (.Platform$OS.type != "windows") {
>     initSomeServices()
>   }
>   if (.Platform$OS.type != "windows") {
>     on.exit(closeSomeServices())
>   }
> }
> 
> actually triggers a call of 'closeSomeServices()'. I am probably
> misunderstanding something here -- but I thought on.exit() would only be
> called on, well, exit ?

It's the exit from the function, not the exit from the package (which 
isn't really all that well defined -- do you mean unloading, exit from 
R, detaching??

It's not very easy to have something be guaranteed to execute "when 
you're done".  The RODBC package does it using an external pointer, 
which has a hook that is called when R shuts down.  If it's good enough 
to execute on unloading but skip execution on shutdown, then .onUnload 
is available.

Duncan Murdoch



[Rd] on.exit called on loading ?
Duncan Murdoch