[Rd] How to do package cleanup: hooks .onUnload, R_unload_mylib, .onDetach are not called on quit

Renaud Gaujoux renaud at mancala.cbio.uct.ac.za
Wed Nov 6 13:34:16 CET 2013


Many thanks for all responses and clarification!

It worked great by defining a dummy environment in the package
namespace and calling reg.finalizer to "attach" the cleanup function
to it.

Bests,
Renaud

On 6 November 2013 13:54, Prof Brian Ripley <ripley at stats.ox.ac.uk> wrote:
> On 06/11/2013 11:36, Duncan Murdoch wrote:
>>
>> On 13-11-06 5:26 AM, Renaud Gaujoux wrote:
>>>
>>> Hi,
>>>
>>> it seems that the package hooks .onLoad and its C++ pendant
>>> R_unload_mylib are actually not called when R quits, but only when
>>> explicitly calling detach('package:mylib', unload = TRUE).
>>> Maybe this is platform specific, I'm on Ubuntu 13.10 - R 3.0.2 (see
>>> below).
>>
>>
>> No, this is by design.  See ?setHook.
>>
>>>
>>>    * is there a mechanism that a package can use to effectively do some
>>> cleanup on standard exit, such as calling cleaning up routines of a
>>> loaded third-party library? I tried .onDetach but it did not work
>>> either.
>>
>>
>> Yes, you can set a finalizer.  See ?reg.finalizer.
>
>
> RODBC is one example.
>
>>
>>
>>
>>>    * by curiosity, in what kind of practical situation would a user
>>> want to call detach(..., unload = TRUE)?
>
>
> An example is when you want a different version of a package.  (That might
> now work and probably will not if the package does not unload its DLL.)
>
>
>>>    * is there a reason why the hooks are not called on quit?
>>
>>
>> They are slow to run, and are usually not needed.  Finalizers handle the
>> rare cases where you really do need something to happen.
>
>
> Or to put it another way, the OS will do most of the unloading when it
> terminates the process, more efficiently than the process itself can. That
> includes 'unloading' DLLs and freeing memory.
>
>
>>
>> Duncan Murdoch
>>
>>>
>>> Thank you.
>>>
>>> Bests,
>>> Renaud
>>>
>>> ###
>>>>
>>>> Sys.info()
>>>
>>>
>>>         sysname                                      release
>>>                            version
>>>                                       "Linux"
>>> "3.11.0-12-generic" "#19-Ubuntu SMP Wed Oct 9 16:20:46 UTC 2013"
>>>                                      nodename
>>>             machine                                        login
>>>                                       "XXXXX"
>>>            "x86_64"                                     "renaud"
>>>                                          user
>>>      effective_user
>>>                                      "renaud"
>>>            "renaud"
>>>>
>>>> sessionInfo()
>>>
>>> R version 3.0.2 (2013-09-25)
>>> Platform: x86_64-pc-linux-gnu (64-bit)
>>>
>>> locale:
>>>   [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
>>> LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
>>> LC_MONETARY=en_US.UTF-8
>>>   [6] LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C
>>>                 LC_ADDRESS=C               LC_TELEPHONE=C
>>> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
>>>
>>> attached base packages:
>>> [1] stats     graphics  grDevices utils     datasets  methods   base
>>>>
>>>>
>>>
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
>
> --
> Brian D. Ripley,                  ripley at stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self)
> 1 South Parks Road,                     +44 1865 272866 (PA)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
>



More information about the R-devel mailing list